java 第五章 子类与继承

来源:互联网 发布:截动态图软件 编辑:程序博客网 时间:2024/05/29 09:07

1. 继承是一种由己有的类创建新类的机制。由继承得到的类称为子类,被继承的类称为父类(超类)。Java不支持多重继承,即子类只能有一个父类

2. 在类的声明中,通过使用关键字extends来定义一个类的子类,格式如下:class子类名 extends 父类名{}。

3. 如果C是B的子类,B又是A的子类,习惯上称C是A的子孙类。Java的类按继承关系形成树形结构,在这个树形结构中,根节点是Object(java.lang包中的类),即Object是所有类的祖先类。任何类都是Object类的子孙类,每个类有且仅有一个父类,一个类可以有多个或零个子类。

4. 如果子类和父类在同一个包中,那么,子类自然地继承了其父类中不是private的成员变量作为自己的成员变量,并且也自然地继承了父类中不是private的方法作为自己的方法,继续的成员变量或方法的访问权限保持不变。不在同一个包时,父类的private和友好访问权限的成员变量不会被子类继承,也就是说,子类只继承父类的protected和public访问权限的成员变量作为子类的成员变量;同样,子类只继承父类的protected和public访问权限的方法作为子类的方法。

5. 使用UML图来表示继承关系,实线的起始端子类的UML图,终点端父类的UML图,但终点端使用一个空心的三角形表示实线的结束。

6. 对于D类自己声明的protected成员变量和方法,只要Other类和D类在同一个包中,object对象就可以访问这些protected成员变量和方法。对于子类D从父类继承的protected成员变量或方法,需要追溯到这些protected成员变量或方法所在的祖先类,例如是A类,只要Other类和A类在同一个包中,object对象能访问继承的protected变量和protected方法。

7. 当子类创建对象时,父类所有的成员变量也都分配了内存空间,但只将其中一部分作为分配给子类对象的变量。

8. 子类声明的成员变量的名字和从父类继承来的成员变量的名字相同(声明类型可以不同),子类就会隐 藏所继承的成员变量

9. 子类继承的方法只能操作子类继承和隐藏的成员变量。子类新定义的方法可以操作子类继承和子类新声明的成员变量,但无法操作子类隐藏的成员变量(需使用super关键字操作子类隐藏的成员变量)。

10. 子类通过重写可以隐藏已继承的方法(方法重写称为方法覆盖)。方法重写,是指子类中定义一个方法,这个方法的类型和父类的方法的类型一致或者是父类的方法的类型的子类型,并且这个方法的名字,参数个数,参数的类型和父类的方法完全相同。重写方法的类型可以是父类方法类型的子类型,即不必完全一致。

11. 重写方法既可以操作继承的成员变量,调用继承的方法,也可以操作子类新声明的成员变量,调用新定义的其他方法,但无法操作被子类隐藏的成员变量和方法。

12. 重写父类的方法是,不允许降低方法的访问权限,但可以提高访问权限

13. 子类一旦隐藏了继承的成员变量,那么子类创建的对象就不再拥有该变量,该变量将归关键字super所拥有。如果在子类中想使用被子类隐藏的成员变量或方法,就需要使用关键字super。例如:super.x,super.play()就是访问和调用被子类隐藏的成员变量x和方法play()。

14. 当用子类的构造方法创建一个子类的对象时,子类的构造方法总是先调用父类的某个构造方法由于子类不继承父类的构造方法,因此,子类在其构造方法中需使用super来调用父类的构造方法,而且super必须是子类构造方法的头一条语句。当在父类中定义多个构造方法时,应当包括一个不带参数的构造方法,以防子类忽略super时出现错误。

15. final关键字可以修饰类,成员变量和方法中的局部变量

16. final类不能被继承,即不能有子类。Java不允许用户程序扩展String类,为此,java将它修饰为final类。

17. 如果用final修饰父类中的一个方法,那么这个方法不允许子类重写,也就是说,不允许子类隐藏可以继承的final方法。

18. 如果成员变量或局部变量被修饰为final,那它就是常量。常量在声明时没有默认值,这就要求程序在声明常量时必须指定该常量的值

19. 当用子类创建一个对象,并把这个对象的引用放到父类的对象中时,例如:Animal a;

a=new Tiger();

Animal a;

Tiger b=new Tiger();

A=b;

这时,称对象a是对象b的上转型对象(老虎是动物)。

20. 对象的上转型对象实体是子类负责创建的,但上转型对象会失去原对象的一些属性和功能

21. 上转型特点:(1)上转型对象不能操作子类新增的成员变量不能调用子类新增的方法。(2)上转型对象可以访问子类继承或隐藏的成员变量,也可以调用子类继承的方法或子类重写的实例方法(其作用等价于子类对象去调用这些方法)。

22. 不可以将父类创建的对象的引用赋值给子类声明的对象(不能说人是美国人)。

23. 如果子类重写了父类的静态方法,那么子类对象的上转型对象不能调用子类重写的静态方法,只能调用父类的静态方法

24. 多态性是指父类的某个方法被其子类重写时,可以各自产生自己的功能行为。

25. 用关键字abstract修饰的类称为abstract类(抽象类),如:

Abstract class A{}

26. 用关键字abstract修饰的方法称为abstract方法(抽象方法),如:

abstract int min(int x,int y);

27. 对于abstract方法,只允许声明,不允许实现(没有方法体),而且不允许使用final和abstract同时修饰一个方法或类,也不允许使用static修饰abstract方法,即abstract方法必须是实例方法。

28. 和普通类相比,abstract类中可以有abstract方法(普通类中不可以有abstract方法),也可以有非abstract方法。

29. 对于abstract类,我们不能使用new运算符创建该类的对象。

30. 如果一个非抽象类是某个抽象类的子类,那么它必须重写父类的抽象方法,即去掉abstract方法的abstract修饰,并给出方法体。如果一个抽象类是抽象类的子类,它可以重写父类的abstract方法,也可以继承父类的abstract方法。

31. 可以使用abstract类声明对象,尽管不能使用new运算符创建该对象,但该对象可以成为其子类对象的上转型对象,那么该对象就可以调用子类重写的方法。

32. “开-闭原则”就是让设计的系统对扩展开放,对修改关闭。

 

原创粉丝点击