抽象类与抽象方法

抽象类:关键字(abstract)

为什么需要抽象类?

1.父类的方法体好多情况下是没有内容的。

2.子类万一没有重写正确,也没有提示。

抽象类的定义:abstract class 返回类型 类名;

抽象方法的定义:

普通方法的写法:public void KaiShi(){}

抽象方法的写法:public void KaiShi();   (没有方法体);

抽象方法与抽象类的关系:

抽象类中可以没有抽象方法;

抽象方法所在的类必须是抽象类;

注意:抽象类是不能被实例化的(不能直接被new出来)

二:抽象方法的继承关系:

1.当父类中有继承方法时(当然,有抽象方法那么它必须是个抽象类了),它的子类不是抽象类时,那么它的子类中必须继承父类中的抽象方法(这样就防止了你在子类中重写父类方法时写错的情况)例:

图一:

图二:

2..当父类中有继承方法时(当然,有抽象方法那么它必须是个抽象类了),它的子类也是抽象类时,那么它的子类中可以不继承继承父类中的抽象方法(那么你写错后,会当做例外写了一个方法)例:

图1:

图2:

当我再写一个图二中的派生类时,并且继承它里面的抽象方法时,他会自动继承JianPan的父类中的抽象方法:如下图所示

                       抽象类与接口中的方法访问修饰符的问题

1、抽象类中的抽象方法(其前有abstract修饰)不能用private、static、synchronized、native访问修饰符修饰。原因如下:抽象方法没有方法体,是用来被继承的,所以不能用private修饰;static修饰的方法可以通过类名来访问该方法(即该方法的方法体),抽象方法用static修饰没有意义;使用synchronized关键字是为该方法加一个锁。。而如果该关键字修饰的方法是static方法。则使用的锁就是class变量的锁。如果是修饰类方法。则用this变量锁。但是抽象类不能实例化对象,因为该方法不是在该抽象类中实现的。是在其子类实现的。所以。锁应该归其子类所有。所以。抽象方法也就不能用synchronized关键字修饰了;native,这个东西本身就和abstract冲突,他们都是方法的声明,只是一个吧方法实现移交给子类,另一个是移交给本地操作系统。如果同时出现,就相当于即把实现移交给子类,又把实现移交给本地操作系统,那到底谁来实现具体方法呢?



2、接口是一种特殊的抽象类,接口中的方法全部是抽象方法(但其前的abstract可以省略),所以抽象类中的抽象方法不能用的访问修饰符这里也不能用。而且protected访问修饰符也不能使用,因为接口可以让所有的类去实现(非继承),不只是其子类,但是要用public去修饰。接口可以去继承一个已有的接口。

原文地址:https://www.cnblogs.com/AnswerTheQuestion/p/6235668.html