Java基础之继承
【摘要】 1.0 继承概述继承是面向对象三个特征之一。可以使子类具有父类的属性和方法,还可以在子类重新定义,追加属性和方法。继承的格式public class 子类名 extends 父类名{}public class Zi extends Fu{}Fu:是父类,也称基类、超类Zi:是子类,也称派生类 1.1 继承的好处提高了代码的 复用性(多个类相同的成员可以放到同一类中)提高了代码的 维护性(修...
1.0 继承概述
- 继承是面向对象三个特征之一。可以使子类具有父类的属性和方法,还可以在子类重新定义,追加属性和方法。
- 继承的格式
public class 子类名 extends 父类名{}
public class Zi extends Fu{}
- Fu:是父类,也称基类、超类
- Zi:是子类,也称派生类
1.1 继承的好处
- 提高了代码的 复用性(多个类相同的成员可以放到同一类中)
- 提高了代码的 维护性(修改一处多处修改)
1.2 继承的弊端
- 继承让父类和子类产生了关系,当父类发生改变时子类也会改变,削弱了 子类的独立性
1.3 什么时候用继承
- 继承的关系体现为 包含
- 假设:我有两个A和B类,如果他们满足A是B的一种,或者B是A的一种,就说明他们存在继承关系,这个时候可以用继承了,否则就不能滥用继承
- 举例:苹果和水果、猫和动物就可以用继承;猫和狗就不行
1.3 继承中变量的访问特点
- 在子类中访问一个变量:
- 先在子类局部变量中找
- 子类成员范围中找
- 父类成员范围中找
- 如果都没有就报错(不考虑父亲的父亲)
- 范例:
- 父类
package ceshi;
public class Fu {
public int age=20;
}
- 子类
package ceshi;
public class Zi extends Fu{
public int height=175;
public int age = 30;
public void show(){
int age =40;
System.out.println(age); //40
System.out.println(height);
//System.out.println(weight); //报错
}
}
1.4 super关键字
- super 关键字和 this 关键字用法相似
- this:代表本类对象的引用
- super:代表父类对象引用
- 案例:
- 父类
package ceshi;
public class Fu {
public int age=20;
}
- 子类
package ceshi;
public class Zi extends Fu{
public int age = 30;
public void show(){
int age =40;
System.out.println(age); //40
//1.访问本类中的成员变量age
System.out.println(this.age); //30
//2.访问父类中的成员方法
System.out.println(super.age); //20
}
}
1.5 继承中构造方法的访问特点
- 子类中所有构造方法默认都会访问父类中的无参构造方法
- 为什么呢?
- 因为子类会继承父类中的数据,可能还会使用父类中的数据。所以子类初始化前,一定要完成父类初始化
- 每一个子类构造方法第一句默认都是:super();
- 如果父类有没无参构造方法,只有带参构造方法,怎么办呢
- 通过super关键字去调用带参构造方法
- 在父类自己提供一个无参构造方法(推荐使用)
- 案例:
- 父类
package ceshi;
public class Fu {
/*public Fu() {
System.out.println("Fu中无参构造方法");
}*/
public Fu(){};
public Fu(int age) {
System.out.println("Fu中带参构造方法");
}
}
- 子类
package ceshi;
public class Zi extends Fu{
public Zi() {
// super(); //默认有所以不用写
System.out.println("Zi中无参构造方法");
}
public Zi(int age) {
// super();
System.out.println("Zi中带参构造方法");
}
}
1.6 继承中成员方法的访问特点
- 通过子类访问一个方法:
1.先在子类成员范围找
2.父类成员范围找
3.如果都没有报错 - 父类
package ceshi;
public class Fu {
public void show(){
System.out.println("Fu中show方法调用");
}
}
- 子类
package ceshi;
public class Zi extends Fu{
public void method() {
super.show();
System.out.println("Zi中method方法被调用");
}
}
1.7 方法重写
- 概述:子类中出现了和父类一模一样的方法声明
- 应用:当子类需要父类的功能,而功能主体子类有自己特有的内容时,可以重写父类。沿袭父类的功能,又有自己特有的功能
- @Override:重写方法上面加上 @Override 注解,可以帮助我们检测重写方法申明的正确性
- 快捷键 :在继承父类的子类中,写下父类方法名,按下回车,会自动补全重写方法体
- 范例:手机类和新手机类
- 手机类
package ceshi;
public class Phone {
public void call(String name) {
System.out.println("给"+name+"打电话");
}
}
- 新手机类
public class NewPhone extends Phone{
@Override
public void call(String name) {
System.out.println("开启视频");
// System.out.println("给"+name+"打电话");
super.call(name);
}
}
1.8 方法重写注意事项
- 1、私有方法不能被重写,父私有成员子不能继承(private修饰的)
- 2、子类方法访问权限不能更低(public>默认>私有=)
- 父类
package ceshi;
public class Fu {
private void show() {
System.out.println("Fu中show方法被调用");
}
public void method() {
System.out.println("Fu中method方法被调用");
}
}
- 子类
package ceshi;
public class Zi extends Fu{
/*@Override //报错,私有方法不能被继承
private void show() {
System.out.println("Zi中show方法被调用");
}*/
void method() { //报错,访问权限低于public,把父类public去掉就可以
System.out.println("Fu中method方法被调用");
}
}
1.9 Java中继承的注意事项
- Java中类只支持单继承(只继承一个类),不支持多继承
- Java中支持多层继承(C继承B,B继承A)
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)