首页 > 编程语言 > 详细

Java继承详解

时间:2019-11-10 21:35:36      阅读:76      评论:0      收藏:0      [点我收藏+]

权限修饰符:

private 本类(自己)
默认 本类(自己),同一个包下的类(自己和后宫)
protected 本类(自己),同一个包下的类(自己和后宫),不同包下的子类(自己,后宫,儿子【子类】)
public 本类(自己),同一个包下的类(自己和后宫),不同包下的子类(自己,后宫,儿子【子类】),不同包下的无关类(所有人)

默认修饰符的案例:

//A包下
技术分享图片

//B包下
技术分享图片

错误:import A包.Student;//这步导入不了Student

protected修饰符的案例:

//A包下
技术分享图片

//B包下
技术分享图片

错误:protected仅能允许不同包下的子类(自己,后宫,儿子【子类】)继承
技术分享图片

正确:jk是Student类在不同包下的子类

是否能继承private

答:不能!被private修饰的内容不能被子类继承。
子类可以通过get方法来访问父类的变量(尽管子类内部没法继承父类的私有变量)
即:子类变量 = get父类私有变量{ return 父类私有变量}
例如:一个比较乱伦的故事,王子如何得到父王私有的王后?
技术分享图片
技术分享图片
技术分享图片
技术分享图片

this关键字和super关键字

this关键字:当前类的对象,强调是对象
谁来调用包含this的这个方法,this就指的是谁

super关键字:父类内存空间的引用

要了解this和super的深层含义,我们需要了解继承发生的详细过程。
技术分享图片
技术分享图片
技术分享图片

当Son类继承Father类并且实例化时,此时的Father中有默认的无参构造方法Father(),同理Son中也有默认的无参构造方法Son(),
并且在Son中也有默认的无参构造方法Son()中的第一行,有隐藏的super();
这个构造方法Son()中隐藏的super()与Father中有默认的无参构造方法Father()共存,
当Father中有默认的无参构造方法Father()被我们人为显式定义成Father()或者Father(参数列表)的时候,
需要我们手动在Son类中添加构造方法Son(),并且要求在构造方法Son()的第一行显示写出super()或者super(参数列表);
总之,super的使命是让父类在子类实例化前进行初始化,因为子类实例化的时候会用到父类的成员,但是父类并不实例化,因此super()叫做父类内存空间的引用,super()在子类实例化前创造了父类的内存空间并且让它与子类的对象在产生联系。
=============
a//main方法内部
this.a//本类内部的成员变量
this()//本类的构造方法
this.method()//本类的成员方法
super.a//父类内部的成员变量
super()//父类的构造方法
super.method()//父类的成员方法

子类中的无参构造方法被调用时,会先执行父类的无参构造方法
子类中的带参构造方法被调用时,会先执行父类的无参构造方法

子类在使用子类自己的构造方法创建对象之前,必须先访问父类的构造方法。
为啥?
因为子类在创建对象的过程中可能使用父类的内容,父类如果没有初始化子类不能访问。

举例:

class Father{
//系统也会默认提供一个
public Father(){
system.out.println("父类的构造方法");
}

}
class Son entends Father{

public Son(){
//super();系统提供的,我们看不到。用于访问父类的无参构造方法
//如果我们手动写上super(带或者不带参数),this(带或不带参数)这种访问构造方法的语句必须放在构造方第一行且有且只有一个;则父类中不会系统默认     //提供无参构造方法!因为如果父类提供默认构造方法,就又会在子类中默认提供       //super(),加上我们自己写的super(),那就有了两个父类的构造方法!
    system.out.println("子类的构造方法");
}

}

首先父类需要先创建
其次,在子类创建有无参数的构造方法时,会先执行super(),我们可以写可以不写

当父类没有无参构造方法时:
1.我们自己写一个无参构造方法(推荐)
2.我们就在子类中写上super(参数);

只要做到,子类初始化之前,必须先初始化父类即可

举例5:录屏一个构造套构造的例子

通过子类对象访问方法

先子类成员范围
再父类成员范围
再父亲的父亲

this:当前类的对象,强调是对象
super:父类的内存空间

执行子类的继承父类的方法
方法的重写:
子类中出现了与父类一模一样的方法声明,这叫方法的重

方法重写
注解
@Override
帮忙检查重写的方法声明是否正确
面试:方法的重写和重载的区别?

方法重写的注意事项:

1.父类的私有方法,子类无法继承也无法重写
2.子类的访问修饰符也必须不比父类的低!(大于等于关系,但是private级别不能被重写)(一个方法前面没有任何访问修饰符,则前面也是有一个默认的访问修饰符的)
3.方法的重写 返回值类型可以不同,但是返回值类型必须是父类返回值类型的子类
比如父类的返回值类型是object,子类的返回值类型是String类,则无错误
4.Java只能单继承,不能多继承,可以多层继承

技术分享图片

Java继承详解

原文:https://www.cnblogs.com/maomaodesu/p/11831653.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!