C++允许多继承,而java不允许多继承,但支持多层继承
继承结构创建对象时,会把父类的class文件也添加到方法区中,堆内存中开辟两个区域,一部分存放父类的成员变量,另一部分存放子类的成员变量。 创建对象的main方法出栈后,堆内存中的成员变量被回收。
子类可以继承父类的私有成员变量,但不能直接使用
子类只能继承父类的虚方法 (非final\private\static),形成一张虚方法表,在调用父类的方法是虚方法时,直接从子类的虚方法表中查找并调用,若调用的方法不是虚方法时,需要层层往上查找。
this()访问本类构造方法一般用于赋予默认值使用。
常用于以父类对象为参数传参,进而能方便的调用其子类重写的方法。
多态调用成员变量的特点:编译看左边,运行看左边。编译时看父类是否有该成员变量,若有则编译成功,否则直接编译失败。运行时,找父类中的成员变量,并打印出来。
不使用多态调用成员变量时,编译时首先到该类所在空间找该成员变量,若没找到,则去父类中寻找,找到则打印,否则报错。
多态调用成员方法的特点:编译看左边,运行看右边。编译时看父类中是否有该成员方法,若有则编译成功,否则直接编译失败。运行时,找子类是否对该方法重写,若有则打印该重写方法,否则打印父类中的方法。
1.eg
class Person {
public void print() {
System.out.println("1.我是人类!");
}
}
class Student extends Person {
public void print() {
System.out.println("2.我是学生!");
}
}
class Worker extends Person {
public void print() {
System.out.println("3.我是工人!");
}
}
public class CanShuTongYiHua {
public static void main(String[] args) {
//Person per = new Student();
WhoYouAre(new Student());
//Person per = new Worker();
WhoYouAre(new Worker());
}
public static void WhoYouAre(Person per) {
per.print();
}
}
权限修饰符
protected和public的区别:protected修饰的变量在两个类之间存在继承关系时可以使用,但不存在关系的无关类不能直接使用,而public在任何情况下都能直接使用。开发过程中一般将成员变量私有,将成员方法公有。
如果方法中的代码是抽取其他方法中共性代码,这个方法一般也私有。
代码块
局部代码块
通过{}来控制变量的生命周期。(已淘汰)
构造代码块(已淘汰,不够灵活)
静态代码块(初始化,防止变量被反复创建,减少内存占用)
抽象方法与抽象类
抽象类是对事物的抽象。
抽象类虽然不能实例化,但可以用来给子类传参。
接口
接口是一种规则,是对行为的抽象。
对于基本数据类型,浅克隆和深克隆的拷贝效果相同,对于引用数据类型,浅克隆没有申请新的地址空间,而是保存待拷贝对象的地址,即变量A、B指向同一地址空间。