java抽象方法和抽象类的区别_子类能继承父类的所有方法和属性

java抽象方法和抽象类的区别_子类能继承父类的所有方法和属性1、抽象方法如果父类的方法本身不需要实现任何功能,仅仅是为了定义方法签名,目的是让子类去覆盖它,那么,可以把父类的方法声明为抽象方法

java抽象方法和抽象类的区别_子类能继承父类的所有方法和属性"

1、抽象方法

        如果父类的方法本身不需要实现任何功能,仅仅是为了定义方法签名,目的是让子类去覆盖它,那么,可以把父类的方法声明为抽象方法

class Person {    
    // 定义抽象方法
    public abstract void run();
}

        把一个方法声明为abstract,表示它是一个抽象方法,本身没有实现任何方法语句。因为这个抽象方法本身是无法执行的,所以Person类无法被实例化。并且编译器会报错无法编译Person类,因为它包含抽象方法。

        必须把Person类本身也声明为abstract,才能正确编译它,如:

// 抽象方法必须定义在抽象类中
  abstract class Person {
     public abstract void run(); 
 }

2、抽象类

        如果一个class定义了方法,但没有具体执行代码,这个方法就是抽象方法,抽象方法用abstract修饰。因为无法执行抽象方法,因此这个类也必须申明为抽象类(abstract class)。

        使用abstract修饰的类就是抽象类,抽象类无法实例化。

// 编译报错,Person不能被实例化
Person p = new Person(); 

        抽象类本身被设计成只能用于被继承,因此,抽象类可以强迫子类实现其定义的抽象方法,否则编译会报错。抽象方法实际上相当于定义了”规范”。

abstract class Person {  // 定义抽象类Person
    public abstract void run();   // 抽象方法run()
}


class Student3 extends Person {   // 继承抽象类Person
    @Override
    public void run() {   // 必须覆写父类run()方法,否则会报错
        System.out.println("Student.run");
    }
}

Student p = new Student();
p3.run();       // 运行结果:Student.run

3、面向抽象编程

        定义了抽象类Person,以及具体的Student子类的时候,可以通过抽象类Person类型去引用具体的子类实例。

        这种引用抽象类的好处在于,对其进行方法调用,并不关心Person类型变量的具体子类型。

// Person类型的引用变量s指向Student实例。
Person s = new Student();
s.run();

        这种尽量引用高层类型,避免引用实际子类型的方式,称之为面向抽象编程。

        面向抽象编程本质:

        (1)上层代码只定义规范

        (2)不需要子类就可以实现业务逻辑

        (3)具体的业务逻辑由不同的子类实现,调用者并不关心

4、总结

        通过abstract定义的方法是抽象方法,它只定义没有实现。抽象方法定义了子类必须实现的接口规范。

        定义了抽象方法的class必须被定义为抽象方法,从抽象类继承的子类必须实现抽象方法。

        如果不实现抽象方法,则该子类仍是一个抽象类。

        面向抽象编程使得调用者只关心抽象方法的定义,不关心子类的具体实现。

今天的文章java抽象方法和抽象类的区别_子类能继承父类的所有方法和属性分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/78562.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注