java继承

本文介绍了如何通过Java中的继承机制减少代码重复,创建Animal基类并让Dog和Cat类继承,同时讲解了关键字`extends`、`implements`的用法,父类成员访问,final修饰符,方法重写以及抽象类和抽象方法的概念。
摘要由CSDN通过智能技术生成

在创建类的时候会出现多次重复性代码,导致代码重复性高,此时可以通过继承提高代码复用性。
比如:
要描述动物园里的动物状态,我们需要Dog类,Cat类等代码如下

class Dog{
    String name;
    int age;
    void eat(){
        System.out.println("在吃饭");
    }
}
class Cat{
    String name;
    int age;
    void eat(){
        System.out.println("在吃饭");
    }
}

可以看到里面的eat方法和成员变量都是重复的,此时我们可以提取不同种动物的共同特性作为父类Animal类,代码如下

public class ExtendsTest {
    public static void main(String[] argc){
        Dog dog = new Dog();
        Cat cat = new Cat();
        dog.eat();
        cat.eat();
    }
}

class Animal{
    String name;
    int age;
    void eat(){
        System.out.println("在吃饭");
    }
}
class Dog extends Animal{

}
class Cat extends Animal{

}

结果如下:
在这里插入图片描述
可以看到Dog和Cat都能够调用他们的父类的方法(即将父类方法继承下来)这样
注意: Java中所有的类都继承于java.lang.Object,当一个类没有继承关键字,则默认继承 Object(这个类在 java.lang 包中,所以不需要 import)祖先类。

继承的两个关键字

  • extends
  • implements(此关键字可以通过继承多个接口变相实现多继承)
public interface A {
    public void eat();
    public void sleep();
}
 
public interface B {
    public void show();
}
 
public class C implements A,B {
}

父类成员的访问

子类中通过super访问父类成员,this指向自己

class Dog extends Animal {
  void eat() {
    System.out.println("dog : eat");
  }
  void eatTest() {
    this.eat();   // this 调用自己的方法
    super.eat();  // super 调用父类方法
  }
}

如果父类有带参构造,子类要使用super显示调用,无参构造不需要调用,默认调用

final关键字

  • 使用final修饰的方法不能被子类重写
  • 使用final修饰的类不能被继承
    修饰符(public/private/default/protected) final 返回值类型 方法名(){//方法体}
  • 修饰的变量必须初始化(一般就会设为public static final

方法的重写

子类中写一个与父类同样的方法(也可以增减参数),调用时默认调用子类重写后的方法,但也可以用super继续调用父类方法,也可以在重写的方法中先调用父类方法再进行补充。

class Animal{
    String name;
    int age;
    void eat(){
        System.out.println("在吃饭");
    }
}
class Dog extends Animal{
    void eat(){
        super.eat();
        System.out.println("Dog在吃饭");
    }
}

继承特性:

  • 子类拥有父类非 private 的属性、方法。
  • Java 的继承是单继承,不支持多继承(一个子类继承多个父类),但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 B 类继承 A 类,C 类继承 B 类,所以按照关系就是 B 类是 C 类的父类,A 类是 B 类的父类,但是可以通过implements继承多个接口来变相实现多继承

抽象类

抽象类中不只有抽象方法也有非抽象方法

抽象方法

  • 无方法体
  • 有抽象方法的类必须是抽象类
abstract class A{
	abstract void show();
}
  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值