欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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的关系:谁是谁的一种,例如:老师和学生是人的一种,那人就是父类,学生和老师就是子类

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