Java面向对象之抽象方法抽象类、接口的使用

秒速五厘米 2022-09-09 02:15 389阅读 0赞

一、抽象

1、简单说明

  • 只是声明,并不去实现
  • 抽象方法:public abstract void act();,没有方法体,直接结束,抽象方法只能存在于抽象类中。
  • 抽象类:public abstract class Test{},继承抽象类的子类必须重写父类中的方法(包括抽象方法),否则子类也必须是抽象类。

2、注意事项
(1)可以用于强制要求子类中必须有哪些方法,因为必须重写抽象父类的方法。
(2)抽象类不能实例化其他类的对象。
(3)不过,抽象类中可以有正常的方法,不一定都是抽象方法。

3、测试练习

  • 在抽象类中实例化对象报错:
    1.3.1
  • 在继承了抽象类的普通子类中实例化对象不会报错:

    abstract class Test06_Father{ //定义一个抽象类

    1. //final常量
    2. final int height = 180;
    3. //在抽象类中定义抽象方法(抽象方法只能存在于抽象类中)
    4. public abstract void act0();
    5. //在抽象类中定义普通方法
    6. public void act1(){ }
    7. public void act2(){ }
    8. //在抽象类中实例化对象:会报错
    9. // Test06_Father tf = new Test06_Father();

    }

    public class Test06_Son extends Test06_Father{ //子类继承一个抽象类

    1. //在继承了抽象类的子类中必须重写的父类方法
    2. public void act0(){
    3. System.out.println("第零次重写抽象方法……");
    4. }
    5. public void act1(){
    6. System.out.println("第一次重写普通方法……");
    7. }
    8. public void act2(){
    9. System.out.println("第二次重写普通方法……");
    10. }
    11. //在继承了抽象类的子类中定义正常执行的方法
    12. public void speeking(){
    13. System.out.println("我是不会变心的!!!");
    14. }
    15. //在子类中定义主方法
    16. public static void main(String[] args){
    17. //重新定义变量可以
    18. int height = 99;
    19. //在继承了抽象类的普通子类中实例化对象:不会报错
    20. Test06_Son ts = new Test06_Son();
    21. ts.act0();
    22. ts.act1();
    23. ts.act2();
    24. ts.speeking(); //调用对象中的方法
    25. }

    }

1.3.2

二、接口

1、简单说明

  • 接口实际上是一种特殊的抽象类,里面所有内容都是公开的。
  • 接口中所有的方法都是抽象方法(不可以有普通的方法),就相当于用抽象方法占个位。
  • 使用interface来声明一个接口,在接口中定义抽象方法时可以不使用abstract。

2、注意事项
(1)接口中定义的属性必须是public static final的,而接口中定义的方法则
必须是public abstract的,因此这些修饰符可以部分或全部省略;

(2)接口中定义的属性的值在实现类中不能被更改;

(3)一个类只能实现某个接口,不能继承某个接口;但接口可以继承接口
接口不但可以继承接口,而且可以继承多个接口,即接口允许多继承;

(4)如果一个类只重写(实现)了一个接口的部分方法,则该类必须的声明为抽象类,否则就必须重写(实现)继承的接口中所有的抽象方法;

(5)一个类可以在继承一个父类的同时实现一个或多个接口,但extends关键字必须的在implements(实现)之前;

(6)不可以new接口对象,但可以定义–个接口引用类型的变量并将其指向
实现接口的对象,达到多态的目的。

3、测试练习

  1. interface Test06_Valuable{ //定义一个接口(特殊类)
  2. //在接口中定义抽象方法:不需要使用abstract
  3. void getMoney();
  4. }
  5. class Test06_Gold implements Test06_Valuable{ //继承(实现)了接口的一个接口
  6. //在继承了接口的接口中必须重写(实现)父类的抽象方法(加个public提高访问权限)
  7. public void getMoney(){
  8. System.out.println("是金子总是值钱的!");
  9. }
  10. }
  11. public class Test06_Son{ //定义主方法的类
  12. public static void main(String[] args){
  13. Test06_Gold go = new Test06_Gold(); //实例化子接口对象
  14. go.getMoney(); //调用子接口对象中的方法
  15. //接口同样具有多态性
  16. Test06_Valuable tv = new Test06_Gold(); //向上赋值
  17. tv.getMoney();
  18. }
  19. }

2.3.1

发表评论

表情:
评论列表 (有 0 条评论,389人围观)

还没有评论,来说两句吧...

相关阅读