java学习面向对象--继承

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_27449993/article/details/80550223

继承:extends

提高了代码的复用性,维护性,并且让类与类产生了关系,是实现多态的前提

Java只能支持单继承并不能实现多继承,但支持多层继承,子继承父,父继承父。。。。

但如果想用所有的方法,通过最低成类创建对象。

继承注意事项:

  1. 子类只能继承父类所有非私有的成员。
  2. 子类不能继承父类的构造方法。可以通过super来访问。
  3. 不要为了部分功能而去继承。
this代表当前对象的引用,super代表父类的引用,this既可以调用本类的也可以调用父类的,(除本类和父类有相同的属性和方法)。

子类的所有的构造方法默认都会访问父类的空参的构造方法。子类初始化之前一定是先初始化父类

class Test2_Extends {
public static void main(String[] args) {
Zi z = new Zi();
}
/*
1,jvm调用了main方法,main进栈
2,遇到Zi z = new Zi();会先将Fu.class和Zi.class分别加载进内存,再创建对象,当Fu.class加载进内存
父类的静态代码块会随着Fu.class一起加载,当Zi.class加载进内存,子类的静态代码块会随着Zi.class一起加载
第一个输出,静态代码块Fu,第二个输出静态代码块Zi
3,走Zi类的构造方法,因为java中是分层初始化的,先初始化父类,再初始化子类,所以先走的父类构造,但是在执行
父类构造时,发现父类有构造代码块,构造代码块是优先于构造方法执行的所以
第三个输出构造代码块Fu,第四个输出构造方法Fu
4,Fu类初始化结束,子类初始化,第五个输出的是构造代码块Zi,构造方法Zi
*/
}
class Fu {
static {
System.out.println("静态代码块Fu");
}

{
System.out.println("构造代码块Fu");
}

public Fu() {
System.out.println("构造方法Fu");
}
}

class Zi extends Fu {
static {
System.out.println("静态代码块Zi");
}

{
System.out.println("构造代码块Zi");
}

public Zi() {
System.out.println("构造方法Zi");
}

}

代码块:

  1. 局部代码块:在方法中中的代码块,(限定变量生命周期,及早释放,提高内存利用率)
  2. 构造代码块(初始化块):在类中的方法外出现,多个构造方法中相同的代码存放在一起,每次调用构造都执行,并且在构造方法前执行

    3.静态代码块:在类中方法外出现,加了static;用于给类进行初始化,在加载的时候就执行,并且只执行一次。一般用于加载驱动。

子类中方法的重写

父类的私有方法不会被继承,所以不存在继承,在实现方法的重写的时候,访问权限不能比父类方法的访问权限更低

父类中的静态方法,子类也必须通过静态方法进行重写。

final概述

final修饰类,类不能被继承

final修饰变量,变量就变成了常量,只能被赋值一次

final修饰方法,方法不能被重写




猜你喜欢

转载自blog.csdn.net/qq_27449993/article/details/80550223