java抽象类继承

抽象类

public abstract class Abstract {
    public String name;
    private int age;
    Abstract(){};
    public Abstract(String myname,int myage){
        this.name=myname;
        this.age=myage;
    }
    public void out(){
        System.out.println("这是抽象类,不能直接实例化"+name+" "+age);
    }
    public void out(String name){
        System.out.println("这是抽象类,不能直接实例化"+name+" "+age);
    }
}
class abs extends Abstract{

    public abs(String myname, int myage) {
        super(myname, myage);
    }
    public void out(){
        System.out.println("子类");
    }
    public static void main(String[] args) {
        new Abstract():
    //    abs a=new abs("hadoop",18);
//        Abstract b=new abs("hive",19);
//        a.out();
//        b.out();
//        a.out("mysql");
//        b.out("sqoop");
    }

}

因为抽象类不能直接被实例化,这里运行会报错
在这里插入图片描述
用子类继承后,就可以通过子类来调用父类方法

    public static void main(String[] args) {
//        new Abstract():
        abs a=new abs("hadoop",18);
        Abstract b=new abs("hive",19);
        a.out();
        b.out();
        a.out("mysql");
        b.out("sqoop");
    }

在这里插入图片描述

### Java抽象类继承抽象类的用法和规则 #### 1. 抽象类继承抽象类的基本概念 在 Java 中,抽象类可以继承另一个抽象类。这种设计允许开发者构建更复杂的层次结构,从而更好地表达对象之间的关系。当一个抽象类继承另一个抽象类时,子类可以选择实现父类中的部分或全部抽象方法,也可以继续声明新的抽象方法。 #### 2. 继承规则 - 子类必须显式调用父类的构造器(如果有参数),通过 `super()` 实现[^4]。 - 如果父类中有未被实现的抽象方法,则子类要么实现这些方法,要么继续保持为抽象类[^3]。 - 子类可以重写父类中的具体方法,也可以新增自己的方法或属性[^1]。 #### 3. 示例代码 下面是一个关于抽象类继承抽象类的具体示例: ```java // 定义第一个抽象类 BaseShape abstract class BaseShape { String color; // 构造函数 public BaseShape(String color) { this.color = color; } // 抽象方法 calculatePerimeter() abstract double calculatePerimeter(); // 普通方法 displayColor() public void displayColor() { System.out.println("颜色是:" + color); } } // 定义第二个抽象类 Rectangle,继承自 BaseShape abstract class Rectangle extends BaseShape { int width, height; // 调用父类构造函数并初始化宽度和高度 public Rectangle(String color, int width, int height) { super(color); // 显式调用父类构造器 this.width = width; this.height = height; } @Override double calculatePerimeter() { return 2 * (width + height); } // 新增抽象方法 calculateDiagonalLength() abstract double calculateDiagonalLength(); } // 具体实现类 Square,继承自 Rectangle class Square extends Rectangle { public Square(String color, int side) { super(color, side, side); // 使用父类构造器设置边长 } @Override double calculateDiagonalLength() { return Math.sqrt(2) * width; // 计算正方形对角线长度 } } ``` 在这个例子中: - `BaseShape` 是顶层抽象类,提供了通用的颜色属性以及周长计算的抽象方法。 - `Rectangle` 继承了 `BaseShape` 并实现了其抽象方法 `calculatePerimeter()`,同时还增加了新的抽象方法 `calculateDiagonalLength()`。 - `Square` 是具体的实现类,继承了 `Rectangle` 并完成了所有剩余的抽象方法。 #### 4. 关键点总结 - **构造器调用**:子类必须显式调用父类的带参构造器,使用 `super()` 方法完成初始化。 - **抽象方法实现**:如果子类不是抽象类,则需要实现所有的抽象方法;否则它可以保留某些方法不实现,并标记自己为抽象类[^3]。 - **多态支持**:通过抽象类的设计,程序能够利用多态特性,在运行时动态绑定不同的实现类实例。 --- 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值