Java中抽象类abstract与接口interface

2021.02.08
第四次纪录
今天主要学习抽象类abstract,和接口interface的部分内容
课堂笔记:
抽象类:
/*抽象类:

  • 1.什么是抽象类?
  • 类和类之间具有共同特征,将这些特征提取出来,形成的就是抽象类。
  • 类本身是不存在的,所以抽象类无法创建对象《无法实例化》。
  • 2.抽象类属于什么类型:引用数据类型
  • 3.抽象类的基本语法:
  • [修饰符列表] abstract class 类名 {
  • 类体}
  • 4.抽象类是无法实例化的、无法创建对象的,所以抽象类是用来被子类继承的。
  • 5.final和abstract无法联合使用,这两个关键字是对立的
  • 6.抽象类的子类还可以是抽象类
  • 7.抽象类虽然无法实例化,但可以有构造方法,这个构造方法是供子类使用的
  • 8.抽象类关联一个概念:抽象方法。
  • 抽象方法表示没有实现的方法,没有方法体的方法。例如:
  • public abstract void doSome();
  • 抽象方法特点:
  •           第一:没有方法体,以分号结尾;
    
  •           第二:前面修饰符列表中有abstract关键字
    

*9.抽象类中不一定有抽象方法,抽象方法必须出现在抽象类中
*10.如果父类是抽象类,子类为非抽象类,父类中有抽象方法,那么子类则必须要进行方法覆盖/重写/实现,

  • 此时子类方法的要求是去掉abstract,以及“分号;”,并在分号后加上“{}”,
  • 如: public void withDraw(){}。
  • 注意:或者子类也加上abstract,变为抽象类,那么不进行方法覆盖,编译器也会通过。
  • 但是却new不了对象 */
    代码演示1:
public class AbstractDemo01 {
    
    
    public static void main(String[] args) {
    
    
        //面向抽象编程,不要面向具体编程,降低程序的耦合度,提高程序的扩展力,这种编程思想符合OCP原则
        Account011 a = new creditAccount011();  //这就是面向抽象编程
        a.withDraw();
        a.doSome();
    }
}
abstract class Account011 {
    
    
    String name;
    public Account011(){
    
    

    }
    public Account011(String name){
    
    
        this.name = name;
    }
    public void doSome(){
    
    
        System.out.println("do something");
    }
    public abstract void withDraw();
}
class creditAccount011 extends Account011 {
    
    
    public creditAccount011(){
    
    
        super();
    }
    //需要将从父类中继承过来的抽象方法进行覆盖/重写,或者也可以叫做实现。
    //把抽象方法实现了。
    public void withDraw(){
    
    
        System.out.println("取钱");
    }
}

输出结果:
取钱
do something

接口:
课堂笔记:
/*接口:

  • 1.接口也是一种引用数据类型
  • 2.接口是完全抽象的。(抽象类是半抽象)或者也可以说接口是特殊的抽象类
  • 3.接口怎么定义,语法是什么?
  • [修饰符列表] interface 接口名 {}
  • 4.接口支持多继承,并且一个接口可以继承多个接口
  • 5.接口中只包含两部分内容,一部分是:常量。一部分是:抽象方法。
  • 接口中没有其他内容,只有这两个部分
  • 6.接口中所有的元素都是public修饰的(都是公开的)
  • 7.接口中的抽象方法定义时:public abstract修饰符可以省略。
  • 8.接口中定义一个常量,public static final修饰符可以省略
  • 9.接口中的方法都是抽象方法,所以接口中的方法不能有方法体。*/
    代码演示2:

```java
public class interfaceDemo01 {
    
    
    public static void main(String[] args) {
    
    
        System.out.println("PI = " + MyMath.PI);
    }
}
interface A {
    
    

}
interface B {
    
    

}
interface C extends A, B {
    
    

}
interface MyMath {
    
    
   // public static final double PI = 3.1415926;
    //常量中public static final可以省略
    double PI = 3.1415926;
    //public abstract int sum(int a, int b);
    //public abstract可以省略
    int sum(int a, int b);
    int sub(int a, int b);
  //Error:(33, 23) java: 接口抽象方法不能带有主体
   /*public void show(){

    }*/
}

输出结果:
PI = 3.1415926

猜你喜欢

转载自blog.csdn.net/qq_55171059/article/details/113760807
今日推荐