java面向对象-继承

2022-07-27,,

Java面向对象

作者q:2835916127

一、继承

1. 继承的实现

  • 继承的概念:

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

格式 : class 子类 extends 父类{ }
  • 举例:
class Dog extends Animal { }

这里不详细举例了

  • 继承带来的好处:

    • 提高了代码的复用性(多个类的属性只需要在基类中声明)
    • 提高了代码的维护性(需要修改时,只需要修改一处即可)
  • 继承带来的弊端

    • 继承使得子类与父类产生了关系,类的耦合性增强了,当父类需要更改时,子类不得不做出改变,削弱了子类的独立性
  • 继承的使用

    • 使用继承,需要考虑类与类之间是否存在is…a的关系,不能盲目使用继承
      • is…a的关系:谁是谁的一种,例如:老师和学生是人的一种,那人就是父类,学生和老师就是子类

2.继承的访问特点

变量的访问特点

  • 在子类中访问一个变量,采用的是就近原则
  1. 在子类的局部范围内查找
  2. 在子类的成员范围内查找
  3. 在父类的成员方法中查找
  4. 如果三种都没查找到就报错(不考虑父亲的父亲)

对象的访问特点

  • 创建

this和super

  • this:当前类对象的引用

  • super:父类对象的引用

  • 构造函数:

    • this(参数1,参数2…)
    • super(参数1,参数2…)

注意:子类创建时都默认调用父类super()构造函数

  1. 创建子类对象时,如果不显式调用父类的构造方法,那么默认会调用父类的super()方法
  2. 如果需要调用父类的构造函数,必须把super(参数1,参数2…) 放在子类构造函数第一句
  3. 不能一个子类调用多次父类构造
    推荐写法: 创建类时把默认构造带上

方法重写:

  • 重写概念:子类中写有与父类一样的方法声明,即方法名、参数类型相同
  • 应用场景:当子类需要父类的功能,并且子类某个方法具有其特有的方法,此时就可以重写父类方法
  • 可以使用注解 @Override 来验证子类中声明的方法是否来自父类,起到【校验】功能
    注意事项:
    1. 父类私有方法不能被重写(父类的私有成员及方法不能被子类继承)
    2. 子类的访问权限不能比父类低(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

《java面向对象-继承.doc》

下载本文的Word格式文档,以方便收藏与打印。