java面向对象-继承
程序员文章站
2022-04-15 17:46:33
Java面向对象作者q:2835916127一、继承篇1. 继承的实现继承的概念:继承是面向对象三大特性之一,继承可以使得子类具有父类的属性和方法,还可以在子类中重新定义,以及追加子类新的方法实现继承的格式格式 : class 子类 extends 父类{ }举例:class Dog extends Animal { }这里不详细举例了继承带来的好处:提高了代码的复用性(多个类的属性只需要在基类中声明)提高了代码的维护性(需要修改时,只需要修改一处即可...
Java面向对象
作者q:2835916127
一、继承篇
1. 继承的实现
-
继承的概念:
- 继承是面向对象三大特性之一,继承可以使得子类具有父类的属性和方法,还可以在子类中重新定义,以及追加子类新的方法
-
实现继承的格式
格式 : class 子类 extends 父类{ }
- 举例:
class Dog extends Animal { }
这里不详细举例了
-
继承带来的好处:
- 提高了代码的复用性(多个类的属性只需要在基类中声明)
- 提高了代码的维护性(需要修改时,只需要修改一处即可)
-
继承带来的弊端
- 继承使得子类与父类产生了关系,类的耦合性增强了,当父类需要更改时,子类不得不做出改变,削弱了子类的独立性
-
继承的使用
- 使用继承,需要考虑类与类之间是否存在is…a的关系,不能盲目使用继承
- is…a的关系:谁是谁的一种,例如:老师和学生是人的一种,那人就是父类,学生和老师就是子类
- 使用继承,需要考虑类与类之间是否存在is…a的关系,不能盲目使用继承
2.继承的访问特点
变量的访问特点
- 在子类中访问一个变量,采用的是就近原则
- 在子类的局部范围内查找
- 在子类的成员范围内查找
- 在父类的成员方法中查找
- 如果三种都没查找到就报错(不考虑父亲的父亲)
对象的访问特点
- 创建
this和super
-
this:当前类对象的引用
-
super:父类对象的引用
-
构造函数:
- this(参数1,参数2…)
- super(参数1,参数2…)
注意:子类创建时都默认调用父类super()构造函数
- 创建子类对象时,如果不显式调用父类的构造方法,那么默认会调用父类的super()方法
- 如果需要调用父类的构造函数,必须把super(参数1,参数2…) 放在子类构造函数第一句
- 不能一个子类调用多次父类构造
推荐写法: 创建类时把默认构造带上
方法重写:
- 重写概念:子类中写有与父类一样的方法声明,即方法名、参数类型相同
- 应用场景:当子类需要父类的功能,并且子类某个方法具有其特有的方法,此时就可以重写父类方法
- 可以使用注解 @Override 来验证子类中声明的方法是否来自父类,起到【校验】功能
注意事项:- 父类私有方法不能被重写(父类的私有成员及方法不能被子类继承)
- 子类的访问权限不能比父类低(public > protected > 默认(不写权限) > private)
public class Fu {
private void show() {
System.out.println("Fu中show()方法被调用");
}
void method() {
System.out.println("Fu中method()方法被调用");
}
}
public class Zi extends Fu {
/* 编译【出错】,子类不能重写父类私有的方法*/
@Override
private void show() {
System.out.println("Zi中show()方法被调用");
}
/* 编译【出错】,子类重写父类方法的时候,访问权限需要大于等于父类 */
@Override
private void method() {
System.out.println("Zi中method()方法被调用");
}
/* 编译【通过】,子类重写父类方法的时候,访问权限需要大于等于父类 */
@Override
public void method() {
System.out.println("Zi中method()方法被调用");
}
}
注意事项:
-
java只支持单继承(一个爸爸多个儿子)
-
java中类支持多层继承
-
注意重写和重载的区别
- 重写:子类覆盖父类的方法
- 重载:同一个类中,方法名相同,参数个数或类型不同
final
-
final代表最终的意思,可以成员方法、成员变量、类
- final修饰类
- final修饰类:该类不能被继承(不能有子类,但是可以有父类)
- final修饰成员方法:该方法不能被重写
- final修饰成员变量:表示该变量是一个常量,不能被重新赋值
-
final修饰基本数据类型
- final修饰的基本数据类型,其值不能改变
- final修饰引用类型:其引用类型的地址值不能改变,但是地址里边的内容是可以改变的
-
举例
public static void main(String[] args){
final Student s = new Student(23);
s = new Student(24); // 错误
s.setAge(24); // 正确
}
static
-
概念:static是静态的意思,可以修饰成员方法 和 成员变量
-
特点:
- 被类的所有对象共享,这也是判断使用静态的条件
- 可以通过类名调用(推荐使用)
static的访问特点
- 非静态的成员方法
- 能访问静态的成员变量
- 能访问非静态的成员变量
- 能访问静态的成员方法
- 能访问非静态的成员方法
- 静态的成员方法
- 能访问静态的成员变量
- 能访问静态的成员方法
- 总结成一句话就是:
- 静态成员方法只能访问静态成员
本文地址:https://blog.csdn.net/weixin_42143994/article/details/109864102