Java 继承

本文详细介绍了Java中继承的概念、语法规则,包括如何使用extends关键字,访问权限的控制(private, protected, public),以及多层继承的实践和final关键字的应用。重点讲解了this和super的使用,以及如何平衡封装与子类需求。

1.继承的定义

继承(inheritance)机制:是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展(extends)(增加功能)产生新的类,称派生类。

继承主要解决的问题是:共性的抽取。

被继承的类我们称为父类、基类或超(级)类;
产生的新类我们称为子(级)类,派生类。
1.1语法规则
基本语法:

class 子类 extends 父类 {
    
}

• 使用 extends 继承 父类;
• Java 中一个子类 只能 继承 一个 父类;继承后在子类的对象中就 会存在父类的 数据成员;
• 子类会继承父类的 所有 public 的字段和方法 ;
• 对于父类的 private 的字段和方法 子类是 无法访问 的(会继承);
• 子类的实例中 包含着父类 的实例, 可以使用 super 关键字得到父类实例的引用;

举例:

class Animal {
public String name;
public Animal(String name) {
this.name = name;
}
public void eat(String food) {
System.out.println(this.name + "正在吃" + food);
}
}
class Cat extends Animal {
public Cat(String name) {
// 使用 super 调用父类的构造方法.
super(name);
}
}
class Bird extends Animal {
public Bird(String name) {
super(name);
}
public void fly() {
System.out.println(this.name + "正在飞 ");
}
}
public class Test {
public static void main(String[] args) {
Cat cat = new Cat("小黑");
cat.eat("猫粮");
Bird bird = new Bird("圆圆");
bird.fly();
}
}

注意事项:

• 可以通过this关键字访问父类中的属性。
• 子类继承父类后,子类需要先构造父类。所以在子类的构造函数当中,要通过super()显示调用父类的构造方法。
• 在调用子类构造方法之前会先调用父类构造方法,当子类构造方法中没有使用"super(参数或无参数)"指定调用父类构造方法时,是默认调用父类的无参构造方法;
• 如果父类中包含有参构造方法,就没有系统所提供的无参构造方法了,此时就可以使用“super(参数)”指定调用父类的有参构造方法,且必须放在第一行,不然就会报错。

this和super的使用

• 如果子类继承父类,父类当中存在一个属性,那么在子类当中可以通过super.属性或者this.属性;此时super和this访问到的是同一个属性。
• 如果有另外的属性,只在子类中存在,那么就不能通过super来访问了,只能通过this来访问。

1.2 protected关键字
果把字段设为 private,子类不能访问;但是设成 public又违背了 “封装” 的初衷。那么,就可以使用 protected 关键字。
• 对于类的调用者来说,protected 修饰的字段和方法是不能访问的;
• 对于类的子类和同一个包的其他类来说,protected字段和方法是可以访问的。
四种访问权限:
• private: 类内部能访问, 类外部不能访问
• default(也叫包访问权限): 类内部能访问, 同一个包中的类可以访问, 其他类不能访问.
• protected: 类内部能访问, 子类和同一个包中的类可以访问, 其他类不能访问.
• public : 类内部和类的调用者都能访问。

注:

我们希望类要尽量做到 " 封装 ", 即:隐藏内部实现细节 只暴露出 必要 的信息给类的调用者.因此我们在设计的时候应该尽可能的使用 比较严格 的访问权限,即:如果一个方法能用private 就尽量不要用 public 。

1.4多层继承
即子类还可以进一步的再派生出新的子类。
一般我们不建议超过三次的继承,如果从语法上限制继承可以使用final关键字。

final关键字所修饰的类不能被继承。使用final显式的禁止继承,可以防止继承被滥用。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值