java学习笔记--第六章 类的继承
程序员文章站
2022-06-12 20:45:43
...
这个系列的博客是我个人学习java的学习笔记分享,面向已经有一定C语言编程基础的同学。
每一章的内容都是我学习过、整理过的笔记,具有一定的学习参考价值。
如有错误请与我联系修改,十分感谢!
第六章 类的继承
-
多个类中重复内容过多,可以使用继承
-
在写类的时候,使用
class 类名 extends 继承类名{}
这个时候就可以继承 继承类名中的内容了
-
子类与父类:
- 不同包时,可继承public和protected的方法与属性,不可继承private和友好的属性和方法;
- 同包时,只有private不能继承,但是我们可以在子类中set,get等可继承的方法来使用被private的没有被继承的方法和成员变量。
- 子类无法继承重写父类中static类
-
括展:(很实用在检测继承上)
instanceof运算符:当instanceof左侧的操作元是右侧的类或其子类的对象时,返回true
-
一个类继承只能继承一个类
-
super关键字讲解:
(1)子类实例化的时候,是父类构造器先被调用,然后再调用子类(其实是super起作用,在子类的构造方法第一行有一个默认的super来调用父类的构造方法) (2)如果父类带有有参构造方法,且没有显式定义父类默认构造方法,导致默认的被覆盖,会导致子类的构造器无法通过super()来调用,会报错; 如果想使用super()就要显式的定义默认构造方法。 (3)如果想在子类的构造器中调用父类的有参构造器,那就在super()中写参数,就不是调用默认的了。 (4)不能同时调用两个super() (5)super方便了调用父类构造器中对成员变量的赋值 (6)super()必须放在构造方法的第一行 (7)super和this可区分父类与子类中同名的成员变量:super.name和this.name的区别
-
对方法的重写:
- 对于父类中可继承的方法,可以在子类中进行重写来覆盖父类中的方法
- 但是覆盖了不是没了,我们可以用super.被重写方法名()来调用父类中被重写的方法。
-
final关键字:
(1)如果final修饰在变量上,那这个变量不能修改 (2)final可以修饰在属性上,此时属性必须有初始值,用方法赋值或者直接赋值或者构造器赋值都可以,但是必须有一个初始值 (3)final可以修饰在方法上,此时被修饰的方法可以被调用,但不能被子类重写 (4)final可以修饰在类上,此时这个类绝后,无法被继承
-
对象的上转型对象:
- 使用父类声明对象,但是用不同的子类来对这个对象进行实例化。
这样产生的上转型对象和直接用子类创建的实例对象可调用范围略有不同 - 对象可使用:继承的变量,新增的变量,继承或重写的方法,新增的方法;
- 上转型对象可使用:隐藏的变量,继承的变量,继承或者重写的方法
- 使用父类声明对象,但是用不同的子类来对这个对象进行实例化。
-
抽象类
- 抽象方法:对于经常被子类重写的父类的方法,可以直接把父类的这个方法抽象,就是不写内容,就把方法放在那
以public为例子: public abstract void smoke();
- 抽象类:
同时这个方法所在的父类改名为:abstract class 类名{};
- 抽象方法必须在抽象类;抽象类中不一定有抽象方法。
- 可以使用abstract类声明对象,但是不能用new实例化创建对象,这个对象可以用来成为其子类的上转型对象。
- 抽象类只能被继承;只有继承了抽象类的非抽象类才可以实例化。
- 继承了抽象类的非抽象类需要把抽象方法都进行重写,当然抽象类继承抽象类就不用了。
- 抽象方法不能和private,final和static共用
- 抽象方法:对于经常被子类重写的父类的方法,可以直接把父类的这个方法抽象,就是不写内容,就把方法放在那
下一篇: 第六章 继承