JAVA——抽象与接口自用笔记

JAVA——抽象与接口自用笔记,第1张

JAVA——抽象与接口自用笔记

引用:深入理解Java的接口和抽象类

1.抽象类
  • 定义:如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。抽象方法必须用abstract关键字进行修饰。抽象类也可以拥有成员变量和普通的成员方法
[public] abstract class ClassName {  //抽象类
    abstract void fun();            //抽象方法
}


//抽象类的继承
[public] class abstractImpl extends ClassName {
    void fun() {
      //....
    }
}
  • 抽象类和普通类的区别

        (1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。

        (2)抽象类不能用来创建对象

                  原因:深入Java中的抽象类为何不能实例化?

                   学过汇编你会知道,程序都有一个代码段,再内存中需要占据一定的内存,而抽象类没有具体的实现方法,无法具体的给它分配内存空间,所以为了安全,JAVA不允许抽象类,接口直接实例化。抽象类与接口都不能实例化,继承或实现后就可以实例化了。

        (3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。

           在其他方面,抽象类和普通的类并没有区别

2.接口类
  •       定义: 接口泛指供别人调用的方法或者函数。 接口是对行为的抽象。        

      (1)  接口中可以含有 变量和方法。但是要注意,接口中的变量会被隐式地指定为public static final变量(并且只能是public static final变量,用private修饰会报编译错误),而方法会被隐式地指定为public abstract方法且只能是public abstract方法(用其他关键字,比如private、protected、static、 final等修饰会报编译错误),并且接口中所有的方法不能有具体的实现,也就是说,接口中的方法必须都是抽象方法。从这里可以隐约看出接口和抽象类的区别,接口是一种极度抽象的类型,它比抽象类更加“抽象”,并且一般情况下不在接口中定义变量。

        (2) 允许一个类遵循多个特定的接口。如果一个非抽象类遵循了某个接口,就必须实现该接口中的所有方法。对于遵循某个接口的抽象类,可以不实现该接口中的抽象方法。

//定义形式
[public] interface InterfaceName {
 
}

//要让一个类遵循某组特地的接口需要使用implements关键字
class ClassName implements Interface1,Interface2,[....]{
}
3.抽象类和接口类区别 抽象类接口类方法类型可以提供成员方法的实现细节只能存在public abstract 方法和变量变量各种类型只能设定为,或被隐式地指定为public static final变量静态代码块以及静态方法可以不能有类的继承和实现

一个类只能继承一个抽象类;

抽象类可以实现接口的所有方法,也可以一个都不实现。

一个类却可以实现多个接口设计层面

对整个类整体进行抽象,包括属性、行为

e.g抽象类airplane(战斗机,客机等子类实现抽象类airplane)

对行为的抽象

e.g接口类飞行存在方法fly()(抽象类Airplane和Bird分别根据自己的需要实现Fly这个接口)

变更抽象类追加具体的类的实现,子类可以不用修改接口类进行了变更,每一个子类都需要对应变更

如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是有没有、具备不具备的关系,比如鸟是否能飞(或者是否具备飞行这个特点),能飞行则可以实现这个接口,不能飞行就不实现这个接口。(抽象类bird实现了飞行类,bird子类鸵鸟可以不实现飞行类中的fly()方法)

参考:java抽象类实现接口

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5609335.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存