1.什么是父类和子类?
简单来说当存在一个类名为Father,这时,如果我们使用关键字extends,class写出下面语句:
class Son extends Father{
.....
}
上面构造的是一个名为Son的新类,和直接用class Son{}不同,它继承了Father类,也就是说Son是Father的子类,Father是Son的父类。
2.子类继承了父类的什么?
我们知道类的两个重要的成员:变量和方法。父类有自己的变量和方法,而子类继承了父类的成员,不仅拥有自己的变量和方法,而且也拥有父类的变量和方法。子类可以直接使用继承的成员。我们都知道类是通过它的构造方法来为自己分配变量内存的,由于子类继承了父类,所以子类的构造方法会先调用父类的构造方法,然后再用自己的构造法方法。(但这并不是继承,即子类不继承父类的构造方法)
例子:
public class Father{
int money = 1000000;
void fight(){
System.out.println("I will kill you")
}
}
class Son extends Father{
int weight = 10;
}
上面一段代码,Son继承了Father的money变量和fight方法。相当于Son里存在:
int money = 1000000;
void fight(){
System.out.println("I will kill you")
}
3.但继承也是有限制的
(1)子类和父类在同一包中的继承性:除了private成员变量和方法,其他的都继承了。
(2)子类和父类不在同一包中:子类只继承父类的protected和public成员。(这里protected和友好类的差别出现了)
4.类的树形结构
类似于:
其中Object是系统默认的祖先类,即它是任何一个类的祖先类。K是B的子孙类,他们之间也存在继承关系。
5.protected的进一步说明
如果D类在它身中创建了一个对象,那么该对象总是可以通过“.”运算符来访问继承的或者自己定义的protected变量和方法,但是如果在其他类中用D类创建了一个对象,那么该对象访问D类的protected变量和方法的权限如下:
(1)对于子类D自己声明的protected成员变量和方法,只要其他类和D类在同一个包中,那么该对象就可以访问这些protected变量和方法。
(2)对于D从父类继承的protected变量和方法,那么只要其他类和D的父类在同一个包中,那么该对象就可以访问这些protected变量和方法。
以上内容包含个人的学习总结,如存在不合理的地方,欢迎大家指出,相互学习。