Java抽象类和接口
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java抽象类和接口相关的知识,希望对你有一定的参考价值。
抽象类
在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的类都是来描述对象的。 如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样的类我们称它为抽象类。
抽象类被abstract关键字修饰的类,由于他是抽象的,也就是存在于意识层面上的类,所以他不能被实例化,实例化的工作应该交由它的子类来完成。
1 abstract class ClassName 2 { 3 }
抽象类和普通类相比,它除了不能创建对象以外,普通类有的他都有(包括构造方法),除此之外,抽象类还能定义抽象方法。
抽象方法写法:修饰符 abstract 返回值类型 函数名(参数列表);
修饰符只能是protected或者public,抽象方法不能写方法体,具体的实现方法要交给子类去写。
1 abstract class ClassName 2 { 3 int num;//默认被protected修饰的成员变量 4 public String str;//公共的成员变量 5 public static int nums = 10;//静态成员变量 6 public final static int numss = 10;//常量 7 public ClassName(){ 8 System.out.println("这是一个构造函数。"); 9 } 10 abstract void method();//默认被protected修饰的抽象方法 11 public abstract void function();//公共权限的抽象方法 12 }
抽象类正常情况下需要写抽象方法(不写也不会报错),但不写的话,那又和普通类又有什么区别,并且他自己还不能被实例化。所以,它需要被继承(没有被继承也不会报错),但如果不被继承,那么抽象类存在的意义呢。
子类(如果不是抽象类)必须重写抽象类中的全部抽象方法。所以,abstract不能与private、static、final或native并列修饰同一个方法。
class ClassNameSon extends ClassName//继承上面的抽象函数 { void method(){}//如果子类不是抽象类,就必须重写父类的抽象函数 public void function(){}//重写的函数的访问权限不能低于父类 }
抽象类总结:抽象类是被用来创建继承层级里子类的模板。
接口(interface)
接口是一些方法特征的集合,这些方法特征来自于具体方法,这些方法符合它们一般来自于一些在系统中不断出现的方法。一个接口只有方法的特征,而没有方法的实现,因此这些方法在不同的地方被实现时,可以具有完全不同的行为。
接口的定义:和类定义不同,定义接口不再使用class关键字,而是使用interface关键字。
1 interface InterfaceName 2 { 3 }
接口不是类,他没有构造函数,也不能被实例化。接口里只有两种成员:常量和抽象方法。
常量写法规范:public final static [数据类型] 常量名 = value;
由于总是使用public static/final修饰符,即使定义时不添加public static/final修饰符,系统也会自动加上,所以可以省略它们。
接口里的抽象方法和抽象类里抽象方法的写法一样。
但是由于接口里只有抽象方法,且它们总是使用public abstract修饰符,即使定义时不添加public abstract修饰符,系统也会自动加上,所以可以省略它们。
1 interface InterfaceName 2 { 3 int num1 = 1; 4 public int num2 = 1; 5 public static int num3 = 1; 6 public final int num4 = 1; 7 public final static int num5 = 1;//在接口中,上面num1-num4都是num5这个常量写法的简写 8 9 void method1(); 10 public void method2(); 11 abstract void method3(); 12 public abstract void method4();//在接口中,method1-method3都是method4这个方法写法的简写 13 }
接口总结:接口是实现它的类所需要遵守的规范。
类、抽象类和接口
1.与抽象类相比,接口的方法都是公共权限的抽象方法,所以它是纯用来被继承、被实现的,否则它将毫无意义。
2.类之间只能单继承(抽象类也是类),接口之间可以多继承。
3.类可以在继承一个类的同时实现多个接口(包括一个)。
interface Interface1 extends Interface2,Interface3//继承了两个接口,可以继承多个 {} interface Interface2{} interface Interface3{}//空接口 class ClassName//空类 { } class ClassNameSon extends ClassName implements Interface2,Interface3//只能继承一个类,可以实现多个接口, { }
4.抽象类实现接口,可以不重写接口里面的抽象方法,但这个抽象类的子类(普通类)必须重写接口的抽象方法。
5.可以用子类调用父类(不管多少代)的常量,包括被实现的接口的常量。抽象类和接口可以直接用自己的类名或接口名调用自己的常量。
1 public class Blog { 2 public static void main(String[] args) { 3 System.out.println(TheInterface.str);//接口调用自己的常量 4 System.out.println(TheAbstract.str);//抽象类名调用接口的常量 5 System.out.println(ClassName.str);//调用父类接口的常量 6 } 7 } 8 interface TheInterface{ 9 String str = "What happened!";//常量简写 10 void method();//抽象方法简写 11 } 12 abstract class TheAbstract implements TheInterface{//抽象类可以不重写父类或被实现接口的抽象方法 13 public void myMethod(){ 14 } 15 } 16 class ClassName extends TheAbstract{ 17 public void method(){}//父类(包括‘祖宗类’,被implements的接口或祖宗接口)的没有被重写的抽象方法都必须重写 18 }
以上是关于Java抽象类和接口的主要内容,如果未能解决你的问题,请参考以下文章