教材学习内容
1.由继承得到的类称为子类,被继承的类称为父类(超类)。特别注意,Java不支持多重承,即子类只能有一个父类。它们之间的关系称为“is-a”关系。使用关键字extends来定义一个类的子类
2.类的树形结构
以object类作为根结点,分为父类子类和子孙类,其中object类没有父类,其它类可以有多个或者零个子类。如果一个类的声明中没有使用extend关键字,这个类系统默认是object类的子类
3.子类和父类在同一个包时,子类自然的继承非private的成员变量和方法,访问权限保持不变。
4.当子类和父类不在同一个包时,父类中的private和友好访问权限的成员变量不会被子类继承。
5.instanceof运算符,Java独有的双目运算符,左面的操作元是对象,右面的操作元是类,当左面的操作元是右面的类或其子类所创建的对象时,instanceof的运算结果是true,否则为false,instance有实例的意思。
6.特殊情况时,子类所声明的成员变量的名字和从父类继承来的成员变量的名字相同(声明的类型可以不同)
教材学习中的问题和解决过程
1.书本中有提到的:每个类(除了object)有且仅有一个父类。这里我产生了疑惑,我以为意思是,object类可以有多个父类。在经过资料查询后我发现,object类没有父类,因为它本身就是所有类的父类。
2.子类和父类可以继承部分有点混淆。网络查到的信息如下:子类不能继承父类的私有属性,但是如果子类中公有的方法影响到了父类私有属性,那么私有属性是能够被子类使用的。
代码调试
public class Father {
private String name;//私有属性
private char sex;
public void tell(){
System.out.println(name+sex);
}
private void speak(){
System.out.println(name+"is speaking!");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public class Child extends Father {
}
/*
定义测试类
*/
public class Test {
public static void main(String[] args) {
Child c=new Child();
c.tell();//tell方法是可以用的
//c.speak();//报错,父类的私有方法不可见
}
}