抽象类和接口

2018-01-05  本文已影响0人  hey_leex

抽象类和接口

抽象类与抽象方法

public abstract class Graphics {
    
    public abstract double getLength();
    
    public abstract double getArea();

}
  1. 抽象类可以看做一种特殊的类,抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。,也可以有普通的方法

    • 抽象方法是抽象类强制希望子类做的事情
    • 非抽象方法是子类继承的事情,提高代码复用性
  2. 普通的类继承抽象类的时候,要求必须要去实现抽象类里面的所有的抽象方法。

     public class Rect extends Graphics {
    
         private double width;
         private double height;
         
         @Override
         public double getLength() {
             return (width+height)*2;
         }
     
         @Override
         public double getArea() {
             return width*height;
         }
     }
    
  3. 子类是抽象类的时候,可以去实现抽象类的抽象方法,也可以不去实现

  4. 抽象类有构造函数吗?

    • 抽象类有构造函数。抽象父类的构造函数是为了给子类访问父类的构造方法并给继承来的属性赋值
  5. 抽象类是不能实例化的

  6. abstract不能和final一起用

    abstract:抽象方法 目的让子类实现

    final类不能被继承

  7. abstract不能和private一起用

    abstract:抽象方法 目的让子类实现

    private不能不能继承给子类

  8. abstract和static 不能一起使用

    abstract抽象的没有方法体

    static静态的 可以类名.访问

  9. 子抽象类继承父抽象类,必须显性调用父抽象类的显性构造器

     abstract class Animal{
       private int age;
       public Animal(int age){
         this.age = age;
         System.out.println("初始化Animal");
       }
       public void move(){
         System.out.println("跑步数:"+this.age);
       }
     }
     
     abstract class Dog extends Animal{
       public Dog(int age){
         super(age);//去掉会报异常
         System.out.println("初始化Dog");
       }
     
     }
     
     public class BigDog extends Dog{
       public BigDog(){
         super(10);
         System.out.println("初始化BigDog");
       }
     
       public static void main(String[] args){
         BigDog a = new BigDog();
         a.move();
       }
     }
    

接口

接口是一种规范 用来规范编程的。

  1. 用关键字interface表示

    • interface 接口名 {}
  2. 类实现接口用implements表示

    • class 类名 implements 接口名 {}
  3. 接口不能实例化

  4. 接口的子类

    • 可以是抽象类。但是意义不大。
    • 可以是具体类。要重写接口中的所有抽象方法。

成员

成员变量

接口的变量默认被public static final修饰(没有写都自动加上)

public int i = 10;
public final int i1 = 10;
public static final int i2 = 10;

构造方法

接口中没有构造方法

成员方法

接口中的方法默认被public abstract修饰,只能是抽象方法

JDK1.8之后允许有default方法和static方法

default void mothed() {
    
}
//default通过子类访问,如果父接口有多个且都重写了方法,就近原则

//static直接通过接口名.方法名访问
static void mothed1(){
    
}

类与抽象类与接口

  1. 类与类:
    继承关系,只能单继承,可以多层继承。
  2. 类与接口:
    实现关系,可以单实现,也可以多实现。
    并且还可以在继承一个类的同时实现多个接口。
  3. 接口与接口:
    继承关系,可以单继承,也可以多继承。

抽象类和接口的区别

上一篇 下一篇

猜你喜欢

热点阅读