java抽象类的继承

package abstractjava;/*
@author wb    
@great forever
i think,therefor i am
*/



public abstract class Person {

    private String name;       //姓名
    private int age;           //年龄
    private String sex;
    private String address;    //地址
    private String telephone;  //电话

    //定义构造方法

    public Person() {}

    public Person(String name, int age, String sex, String address,
                  String telephone) {

        this.name = name;
        this.age = age;
        this.sex = sex;
        this.address = address;
        this.telephone = telephone;
    }

    //定义setter()和getter()方法

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getTelephone() {
        return telephone;
    }

    public void setTelephone(String telephone) {
        this.telephone = telephone;
    }

    //覆写toString()方法
    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + ", sex=" + sex
                + ", address=" + address + ", telephone=" + telephone + "]";
    }

    //使用模板模式,定义好简单模板,打印信息
    /*
     * 模板模式为面向对象设计模式之一,其大概思想(个人理解):
     * 在抽象方法中完成已经确定的内容,而不确定的部分,写成抽象方法并调用
     * 而抽象方法的具体实现,交给继承他的类去具体实现,
     * 这样开发人员只要写好自己的实现部分便可,然后在主方法中,
     * 通过实例化后的抽象类直接调用模板方法便可
     *
     * 以下方法只是一个简单的表示
     *
     * */
    public void display() {

        System.out.println( this );                //公共部分
        System.out.println("-------------------风骚java分割线-----------------");
        getInfo();            //开发人员具体的实现
        System.out.println("-------------------风骚java分割线-----------------");
        System.out.println( "本输出方法采用模板设计模式,以上为学生信息!" );    //公共部分

    }

    //声明抽象方法,打印子类的添加信息
    public abstract void getInfo();


}

 

package abstractjava;/*
@author wb    
@great forever
i think,therefor i am
*/



public class Student extends Person {

    private String sno;            //学号
    private String className;   //班级

    //定义构造方法
    public Student(String name, int age, String sex, String address,
                   String telephone,String sno,String className) {

        super(name,age,sex,address,telephone);
        this.sno = sno;
        this.className = className;
    }


    //定义setter()和getter()方法
    public String getSno() {
        return sno;
    }

    public void setSno(String sno) {
        this.sno = sno;
    }

    public String getClassName() {
        return className;
    }

    public void setClassName(String className) {
        this.className = className;
    }


    //实现父类抽象方法

    public void getInfo() {

        System.out.println( "学号:" + this.getSno() + "\t班级:" + this.getClassName() );
    }

}

 

 

package abstractjava;/*
@author wb    
@great forever
i think,therefor i am
*/

public class main {

    public static void main(String[] args) {
        Person a=new Student("吴勃",23,"男","中国","23432","25038","tongx");
        a.display();
    }
}
### 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、付费专栏及课程。

余额充值