美文网首页
抽象类和接口

抽象类和接口

作者: hey_leex | 来源:发表于2018-01-05 17:03 被阅读0次

抽象类和接口

抽象类与抽象方法

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;
  • 接口中的属性访问:接口名.属性名

构造方法

接口中没有构造方法

  • 没有变量属性,所以没有构造方法
  • 子类继承的无参构造来自Object()

成员方法

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

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

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

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

类与抽象类与接口

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

抽象类和接口的区别

  • 成员区别

    • 抽象类:

      • 成员变量:可以变量,也可以常量
      • 构造方法:有
      • 成员方法:可以抽象,也可以非抽象
    • 接口:

      • 成员变量:只可以常量
      • 成员方法:只可以抽象
  • 关系区别

    • 类与类
      • 继承,单继承
    • 类与接口
      • 实现,单实现,多实现
    • 接口与接口
      • 继承,单继承,多继承
  • 设计理念区别

    • 抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。
    • 接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。

相关文章

  • 5.5-全栈Java笔记:接口的定义和使用

    接口interface 接口的作用 为什么需要接口?接口和抽象类的区别? 接口就是比“抽象类”还“抽象”的“抽象类...

  • java的final关键字

    ——修饰类、接口和抽象类 final可以修饰方法,属性,类!但是不能修饰接口,抽象类;因为 接口和抽象类本身就是...

  • 接口和抽象类的区别

    接口和抽象类有什么区别 你选择使用接口和抽象类的依据是什么? 接口和抽象类的概念不一样。接口是对动作的抽象,抽象类...

  • 抽象类和接口的区别

    以下两篇文章介绍了接口和抽象类的概念接口概念抽象类概念 抽象类和接口的区别: 抽象类:需要使用abstract关键...

  • 接口和抽象类

    接口和抽象类的区别? 接口(interface)和抽象类(abstract class)是支持抽象类定义的两种机制...

  • Android_开发_Day12_抽象类和接口

    Android_开发Day12抽象类和接口 目的: 知道什么是抽象类,什么是接口,学会抽象类的使用,与接口的使用。...

  • Java--接口和抽象类

    ·为什么需要接口?接口和抽象类的区别?  接口就是比“抽象类”还“抽象”的“抽象类”,可以更加规范的对子类进行约束...

  • Kotlin 零基础学习 接口和抽象类

    接口:接口就是暴露一种物体与另外一种物体沟通的方法 抽象类 接口 这么看接口和抽象类没什么区别,抽象类能干的接口也...

  • 接口,抽象类,工厂设计模式,代理模式

    一、接口的结构: 抽象方法 全局常量 最终写法: 其他内部结构内部类内部抽象类内部接口 二、接口和抽象类 抽象类可...

  • 接口跟抽象类的对比

    抽象类和接口的区别抽象类被子类继承 接口被类实现接口可以做方法生命 抽象类可以做方法生命 也可以做方法实现接口中定...

网友评论

      本文标题:抽象类和接口

      本文链接:https://www.haomeiwen.com/subject/fiysnxtx.html