该篇博客目录
1、JAVA继承
2、父子继承的初始化顺序
3、子类方法的重写
4、super关键字
5、final关键字
一、JAVA继承
多个类中存在相同属性和方法时,将这些内容抽取到一个类中,那么多个类无需再定义这些属性和方法,只要继承那个类即可。“is a”关系
1、继承的优点
- 子类拥有父类的所有属性和方法(private无效)
- 实现代码复用
2、语法规则
class 子类 extends 父类{
....
}
class pig extends Animal{
....
}
3、Demo
父类
package extends_eg;
public class Father {
public void say() {
System.out.println("我在说话");
}
public void sleep() {
System.out.println("我在睡觉");
}
}
子类
package extends_eg;
public class Daughter extends Father {
}
主函数
package extends_eg;
public class Main_q {
public static void main(String[] args) {
// TODO Auto-generated method stub
Daughter obj=new Daughter();//因为子类继承了父类所以可以调用父类方法
obj.say();
obj.sleep();
}
}
//输出
//我在说话
//我在睡觉
二、父子继承的初始化顺序
- 先初始化父类再初始化子类
- 先执行初始化对象中属性,再执行构造方法中的初始化
下面是一个父类子类先后执行顺序的Demo
父类
package com.xxxx;
public class Animal {
public int age=10;
public Animal() {
System.out.println("Animal类执行了");
age=20;
}
}
子类
package com.xxxx;
public class Dog extends Animal {
public Dog() {
System.out.println("dog执行");
}
}
主函数
package com.xxxx;
public class Initail {
public static void main(String[] args) {
// TODO Auto-generated method stub
Dog dog =new Dog();
}
}
//输出:
//Animal类执行了
//dog执行
很明显可以看出先执行父类再执行子类
三、子类方法的重写
如果子类对继承父类的方法不满意或者有其他需求,是可以重写父类继承下来的方法的,当调用方法时会优先调用子类的方法
语法规则
- 返回值类型相同
- 方法名相同
- 参数类型及个数相同
下面是子类方法重写的Demo
父类
package extends_eg;
public class Father {
public void say() {
System.out.println("我在说话");
}
public void sleep() {
System.out.println("我在睡觉");
}
}
子类
package extends_eg;
public class Daughter extends Father {
public void say() {
System.out.println("我觉得父类的say方法不够好,我要用自己这个");
}
}
主函数
package extends_eg;
public class Main_q {
public static void main(String[] args) {
// TODO Auto-generated method stub
Daughter obj=new Daughter();
obj.say();//优先调用子类重写后的同名方法
}
}
//输出:
//我觉得父类的say方法不够好,我要用自己这个
四、super关键字
在对象的内部使用,可以代表父类对象
1、访问父类成员变量
- super.成员变量
2、访问父类的方法
- super.成员方法()
3、访问父类构造方法(调用父类构造方法)
- super(..)
- Tip1:如果父类构造方法是无参的,那将会在子类中隐式调用super();。如果父类构造方法是有参的,需要自己显示调用super(..);
- Tip2:super(..)必须出现在第一条语句(可以通过下面的Demo发现)
4、super Demo
父类
package extends_eg;
public class Father {
private int a;
public Father(int a) {
this.a=a;
System.out.println("调用父类构造方法");
}
}
子类
package extends_eg;
public class Daughter extends Father {
private int b;
public Daughter(int a,int b){
super(a);//一定要在第一句(且因为有参,所以要自己显示调用)
this.b=b;
System.out.println("调用了子类的构造器");
}
}
主函数
package extends_eg;
public class Main_q {
public static void main(String[] args) {
// TODO Auto-generated method stub
Daughter obj=new Daughter(1,2);
}
}
//输出:
//调用父类构造方法
//调用了子类的构造器
5、super的应用
- 子类的构造方法中必须调用其父类的构造方法所以要用到super
- 如果父类构造方法是无参的,那将会在子类中隐式调用super();。如果父类构造方法是有参的,需要自己显示调用super(..);
五、final关键字
final关键字可以理解成“最终的”含义,可以修饰类,方法,属性,变量
1、修饰类:该类不允许被继承
final修饰Father类
假设Daughter类继承Father类
报错信息
2、修饰方法:该方法不允许被重写
final修饰父类中的print方法
如果子类对其父类的print方法进行重写的话,将会报错
报错信息
3、修饰类的属性:该类的属性不会进行隐式的初始化,所以只能选择对该属性初始时必须有值或者在构造方法中赋值(两者选其一)
final修饰Father类的属性并且初始化其值后,其他位置不能对其进行修改,否则报错
final修饰Father类的属性且不初始化其值,则必须在构造方法中对其初始化,否则报错
本文详细介绍了Java中的继承概念,包括继承的语法、初始化顺序、方法重写等核心知识点,并通过实例展示了super关键字和final关键字的使用。
173万+

被折叠的 条评论
为什么被折叠?



