继承
继承:
当多个类存在相同的属性(变量)和方法时,从这些类中抽象出父类,在父类中定义这些相同的属性和方法,子类不需要重新定义
public class Animal{
public static void main(String[]args){
Cat2 cat2 = new Cat2();//创建一个Cat2对象
System.out.println(cat2.hobby);
}
}
class Cat1{//父类
String name = "大花猫";
String hobby = "鱼" ;
}
class Cat2 extends Cat1{//子类
String name = "小花猫";
}
输出的结果是鱼
这个创建的是小花猫的对象,当在小花猫的类中没有找到想要的属性时,就会向上一级(父类:大花猫)寻找,找到了就返回
上述代码的执行流程:
1.系统在方法区中加载小花猫和大花猫的类信息
2.程序执行到Cat2 cat2 = new Cat2(); 创建一个cat2 的对象引用指向Cat2,此时堆中的Cat2对象已经有了子类和父类的属性和方法
3.程序执行System.out.println(cat2.hobby); 调用Cat2类的hobby属性,此时Cat2类中没有hobby 属性,java向父类寻找bobby属性,此时父类的hobby属性的值为3
4.找到之后,子类不需要重新定义,直接调用
5.输出 鱼
注意❗️❗️❗️
1.在对象空间中,当父类或其它类的一个属性或方法被私有化,在jvm堆中,仍然存在这些私有化的属性和方法,只是不能被调用2.当我们的父类的属性hobby被私有化了,父类的父类hobby是公共的,Java在查询时,是不会跳过父类私有化的属性去找父类的父类公开的hobby属性,而是直接报错,不会在进行下去。