Java基础07(继承,super,方法重写,修饰符)

继承

继承是java面向对象三大特征之一,可以使得子类具有父类的方法,还可以在子类中重新定义,追加属性和方法
格式:

public class 子类名 extends 父类名{
}

父类也被称为基类,超类
子类也被称为派生类

继承的好处和弊端

1.继承的好处:

  • 提高了代码的复用性(多个类的相同的成员放在同一个类中)
  • 提高了代码的维护性(如果方法的代码需要修改,修改一处即可)

2.继承的弊端:

继承让类和类之间产生了关系,类的耦合性增强了,当父类发生改变时子类也不得不发生改变,削弱了子类的独立性

3.什么时候使用继承?

  • 继承体现的关系:is A,两个类A和B,满足A是B的一种或B是A的一种,说明他们存在继承关系,这个时候就可以考虑使用继承来体现,否则不能滥用继承
  • 举例:苹果和水果(√),猫和动物(√),猫和狗(×)

继承中变量访问特点

  • 首先在子类局部范围内查找
  • 没有就到子类成员范围内查找
  • 还是没有就到父类成员范围内查找
  • 如果还是没有就报错 (不考虑父亲的父亲)

super关键字

super关键字和this关键字用法相似

  • this代表本类中对象的引用
  • super代表f父类存储空间标识(父类中对象的引用)
关键字访问成员变量访问成员方法访问构造方法
thisthis.成员变量,访问本类的成员变量this.成员方法(),访问本类的成员方法this(...) ,访问本类的构造方法
supersuper.成员变量,访问父类的成员变量super.成员方法() ,访问父类的成员方法super(...) ,访问父类的构造方法

继承中构造方法访问特点

子类中所有的构造方法默认都会访问父类中无参构造方法。
为什么?

  • 因为子类会继承父类中数据,可能还会使用父类中的数据,所有在子类初始化之前,一定要先初始化父类的数据
  • 所有子类方法中默认语句第一句都是**super()**
    如果父类中没有无参构造方法,只有带参构造方法怎么办?
  • 在子类中通过super()去显式得调用父类中的带参构造方法
  • 在父类中自己提供一个无参构造方法(推荐

继承中成员方法访问特点

  • 先到子类成员范围中查找,可以通过在子类成员方法中使用super.方法名(),调用父类中同名方法
  • 没找到再到父类成员范围中查找
  • 如果都没有就报错(不考虑父亲的父亲)

super内存图

public class demo2 {
    public static void main(String[] args) {
        //创建对象
        Zi zi = new Zi();
        zi.method();//父类中show()方法被调用
        zi.show();//子类中show()方法被调用
    }

}
  • Zi zi;main()方法入栈后,在栈内存中调用子类
  • new Zi();子类对象初始化,在堆内存中分配地址给子类对象,并初始化子类数据,
  • 子类的构造方法入栈,因为子类构造方法中第一句默认都是super();所以会访问父类,在堆内存中初始化父类,及父类数据
  • 父类构造方法入栈,执行父类中构造方法的方法体,再执行子类构造方法中的方法体
  • 调用method()方法,子类中没有找到,去父类中找,找到后调用
  • 调用子类中show()方法

方法重写

  • 方法重写,指子类中出现了和父类中一样的方法声明
  • 方法重写的应用场景,当子类需要父类的功能,而子类又有自己的特定功能时,可以重写父类中的方法,这样既沿袭了父类中的方法,又有了子类自己的特有内容
  • @override注解,检查重写方法时,声明的正确性

方法重写注意事项

  • 父类中私有方法不能被重写(父类私有成员,子类不能继承)
  • 子类中要重写的方法的访问权限不能低于父类中的方法访问权限(public>默认>private)

java中继承的注意事项

  • java中类只支持单继承,不能多继承
  • java中类支持多层继承

  • 包的作用就是对类进行分类和管理
  • 定义格式:package 包名(多级包用. 点号分开),例如:package.com.test
  • 导包import

修饰符

修饰符分类及总结见:https://www.cnblogs.com/benon94/p/12435064.html

权限修饰符

修饰符本类中同一个包中的子类或无关类不同包下的子类不同包下的无关类
private
default
protected
public

状态修饰符

  1. final
    final修饰局部变量:
    final修饰基本类型变量:变量的数据值不能发生改变
    final修饰引用类型变量:变量的地址值,即其引用不能改变不能发生改变,但其地址里的内容值可以改变
  2. static
    static是静态的意思,可以修饰成员变量,成员方法
    static修饰的成员变量(包括数据),被类的所有对象共享(判断是否使用static修饰的条件)
    可以通过类名直接调用(推荐),也可以通过对象名调用
    static访问特点:
    非静态方法可以访问:静态与非静态成员变量,方法
    静态方法只能访问静态成员变量和方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值