abstract
1)定义:
a.**abstract(抽象)**关键字可以用来修饰类和方法。
b.abstract修饰的类叫做抽象类,该类不能被实例化,也就是不能使用关键字new来创建该类对象。
c.abstract修饰的方法叫做抽象方法,抽象方法只有声明部分,而没有具体的方法体。
2)特点以及规范:
a.非抽象类子类的父类是一个抽象类的话,它必须具体实现父类的所有抽象方法,非抽象方法可以不实现。
b.抽象方法的类,必须用abstract来修饰(抽象类也可以没有抽象方法,但抽象方法必须出现在抽象类中)。
c.一个抽象类只关心它的子类是否具有某种功能,并不关心功能的具体行为,功能的具体行为由子类负责实现。
具体可以看例子:
public class TryAbstract {public static void main(String[] args) {System.out.println(“a”);sonn person = new sonn();person.ShowHello();}}// 抽象类(也可以使用接口,但是子类必须得重新接口方法or子类是抽象类)abstract class Humen implements Comparable {// 抽象类成员可以是抽象的也可以是非抽象的,如下public Humen() {System.out.println(“c”);}// 抽象类不可以被实例化,但是有main方法的话,却是可以被执行的public static void main(String[] args) {System.out.println(“抽象类不可以被实例化,但是有main方法的话,却是可以被调用的”);}// 抽象方法必须写在抽象类里abstract void ShowHello();public void haha() {}}// 继承抽象类class sonn extends Humen {// 继承抽象类,必须重写该类的抽象方法@Overridepublic void ShowHello() {// 抽象方法内不可有private参数// private int b = 2;System.out.println(“b”);}// 抽象类不可以被实例化,具体如下(解声明)// Humen humen = new Humen();@Overridepublic int compareTo(Object o) {// TODO Auto-generated method stubreturn 0;}}// 子类也是抽象类的话,无需重新继承抽象类的抽象方法abstract class abstractSon extends Humen {// 不写Override也是可以的} implements
1)定义:
a.implement所表示的是接口
b.接口其实就是一个抽象类,这个类里面的方法全是抽象方法(抽象类可以包含非抽象方法,但接口这个抽象类里的方法必须全是抽象方法)
2)特点以及规范:
a.一个类可以实现多个接口,但只能继承一个父类
b.定义接口的类里面,方法默认是public abstract 的,也只能是public abstract
c.定义在接口里的变量只能是 public static final
d.可以通过interface关键字来定义抽象类为接口
e.可以通过implements 来实现接口,实现多个接口的时候,用“,”分隔开接口名称
具体看实例:
//可以继承一个父类,实现多个接口public class TryCreateAndUseImplements extends FartherOne implements TheImplement1, TheImplement2 {//实现接口后,也要实现接口里的方法,不然会报错。@Overridepublic void implementWay3() {}public void implementWay1() {}public void implementWay2() {}}//定义接口interface TheImplement1 {// 因为接口里的方法都是抽象的,所以不用abstract来声明也是可以的public void implementWay1();// 也不需要在方法的后面在()后面加上{},如下:public abstract void implementWay2();}//定义接口interface TheImplement2 {//默认public static final 所以不写也可以int i = 1;public static final int j = 2;//只能是public static final,除此之外的都会报错//protected int j = 2;public void implementWay3();}class FartherOne{protected int i = 1;} abstract 与 implements的区别
注意
之前有说过,父类声明子类实例化,这个叫对象上转型实例化,
如farther faa = new son();
但在接口中,它有另一个名字叫接口回调其实都是一个东西,接口声明,实现接口的类进行实例化。
——-END