Java继承-Java板块造梦空间论坛-技术交流-造梦空间论坛

Java继承

继承是指一个类(称为子类)从另一个类(称为父类)继承属性和方法。子类可以访问父类的公共属性和方法,也可以重写(override)它们或定义新的属性和方法。

一、父类和子类

  1. 父类是一个基础类,它定义了一些属性和方法,子类是由父类派生出来的新类,子类可以继承父类的属性和方法,并且可以添加自己的属性和方法,从而实现了代码的复用和扩展。
  2. 子类可以使用关键字“extends ”来继承父类,从而拥有父类的所有公共成员类。
  3. 子类可以访问父类的公共成员,但不能访问父类的私有成员。
  4. 子类可以覆盖(重写)父类的方法,或者添加新的方法和属性,从而实现自己的功能。

例:

父类Animal

class Animal {
    public void move() {
        System.out.println("动物可以移动");
    }
}

子类Dog

class Dog extends Animal {
    public void bark() {
        System.out.println("狗可以吠叫");
    }
}

在这个例子中,Animal 是父类,Dog 是子类。Dog 继承了 Animalmove 方法,并且定义了自己的 bark 方法。通过继承,Dog 类可以重复使用 Animal 类的代码,并且添加自己的行为。

super关键字:

super关键字,用于引用父类的成员(方法、属性、构造函数)。它可以在子类中使用,用于访问和调用父类的成员。

class Animal {
    protected String name;

    public Animal(String name) {
        this.name = name;
    }

    public void eat() {
        System.out.println("动物吃东西");
    }
}

class Dog extends Animal {
    public Dog(String name) {
        super(name); // 调用父类的构造函数
    }

    @Override
    public void eat() {
        super.eat(); // 调用父类的eat()方法
        System.out.println("狗吃骨头");
    }

    public void display() {
        System.out.println("狗的名字是:" + super.name); // 访问父类的属性
    }
}

二、多层继承

比方说有这样个代码:

public class AA {
    public void fun(){
        System.out.println("AAA");
    }
}
public class BB extends AA{
    public void Bfun(){
        System.out.println("BBB");
    }
}
public class CC extends BB{
    public void CCFun(){
        System.out.println("CCC");
    }
}

然后建个测试类Test001

public class Test01 {
    public static void main(String[] args) {
        CC cc = new CC();
        cc.fun();//AA
        cc.Bfun();//BB
        cc.CCFun();//CC
    }
}

但是我们改为下面代码时候,无法访问到BB的下一级CC。

BB bb = new BB();

三、重写方法

重写方法需要满足以下条件:

  1. 子类中的方法与父类中的方法具有相同的名称、参数列表和返回类型。

  2. 子类中的方法访问权限必须大于或等于父类中的方法的访问权限。

  3. 子类中的方法不能抛出比父类中方法更多或更宽泛的异常。

class Animal {
    public void move() {
        System.out.println("动物可以移动");
    }
}
class Dog extends Animal {
    public void move() {
        System.out.println("狗可以跑和走");
    }
}

当我们创建一个 Dog 对象并调用其 move() 方法时,将会输出 "狗可以跑和走",而不是 "动物可以移动"。

Dog myDog = new Dog();
myDog.move(); // 输出 "狗可以跑和走"

四、final 类和方法

final是一个关键字,可以用来修饰变量、方法和类。它的作用是指定被修饰的变量、方法或类是“最终”的,即不可改变的或不可继承的。

五、构造函数

  1. 一旦被赋值,就不能再改变其值,即常量。final变量必须在声明时或构造函数中初始化,未初始化的final变量无法通过编译。final变量的命名规范是大写字母和下划线组成的单词,如MAX_VALUE。
  2. 该方法不能被子类重写,即子类中无法对其进行覆盖。final方法主要用于安全和效率的考虑。
  3. 该类不能被继承,即不能有子类。final类通常用于确保类的安全性和稳定性。

final关键字的使用可以提高程序的安全性和可维护性。尽管final关键字的使用可能会稍微影响程序的性能,但在大多数情况下,这种影响是微不足道的。

 

请登录后发表评论

    没有回复内容

© 造梦空间论坛