继承、封装

本来想继承、多态、和封装写在一起的,最后想想还是把多态独立出来更详细的讨论一下吧(写在下一篇blog里)

一、封装

1.封装概念:

将方法和属性封装到同一个类中

二、继承

1.继承概念:

Java是单继承,也就是意味着一个子类(基类)只能一个父类.用extends关键字实现

子类对象被创建时会先调用父类的构造方法,生成父类对象,然后再调用子类的构造方法,生成子类对象;

即:现有父再有子

另外:类和接口都能继承多个接口(特殊的抽象类),后面blog写

2.继承的特点(父类与子类的关系):

2.1 父类有的子类有

2.2 父类没有的,子类也可以有

2.3 父类有的,我还可以改

3.继承注意点

3.1 子类的构造方法隐式调用父类的无参构造方法:

3.1.1 需要指定调用父类的有参构造方法可以用Supper();//需要放在第一行(参照this()用法)

3.2 子类可以继承父类的方法和属性

3.3 子类不能继承父类的构造方法

4.定义一个类时若没有显式声明一个父类,那么系统会默认将父类指向object类


小彩蛋:

方法的重写(override)不是重载啊:

满足条件是:

1.1重写在子类和父类中

1.2类型、方法名、参数都需要相同

ps:若想要调用父类中被重写的类:

在子类中super().XXX就可以了(注意:这个可以不必要放在第一行)

贴上练习代码君:

package com.jacob.javase;



/*
 * 继承和封装
 */
public class InheritAndPackaging extends Parent {
public InheritAndPackaging() {
// 调用父类构造函数,并创建父类对象
super(3);
// super.test();
System.out.println("child");
}


// super.test();需要存放在方法体中
// 重载的父类的方法(跨类重载)
public void test(int a) {
System.out.println("overLoad Parent!");
}


// 重写父类方法:要求:子类的访问修饰范围必须大于父类的访问修饰范围
public void test() {
// super();需要声明在构造函数中
super.test();
System.out.println("override Parent!");
}


public static void main(String[] args) {
InheritAndPackaging inhert1 = new InheritAndPackaging();
inhert1.initial=1;
System.out.println("此时父类中的初始值"+inhert1.initial);
InheritAndPackaging inhert2 = new InheritAndPackaging();
System.out.println("此时父类中的初始值"+inhert2.initial);
// super.test();不能使用在静态文本中
// inhert.test();
// inhert.test(5);
}
}


// static不能修饰类:只能用public, abstract & final
class Parent {
int initial=0;
// 构造函数只能用:protected、public、private修饰
public Parent(int i) {
System.out.println("has the ags parent");
}


public Parent() {
System.out.println("no args parent");
}


public void test() {
System.out.println("this is will be overrided of testParent");
}
}













原文地址:https://www.cnblogs.com/xieji233/p/6155642.html