抽象类

抽象类的方法访问权限只能是public
其子类不能缩小访问权限。
否则,别人拿到一个父类的引用只想子类,却调不了父类声明的方法。违背了继承的原理。

子类实现父类的抽象方法,必须申明访问权限,而且不能比父类里的权限低。

JAVA抽象类的理解:
1、普通的JAVA类也可以在CLASS前加ABSTRACT声明为抽象,只不过此时的该类不再可以实例化。
2、如果一个类里有一个以上的抽象方法,则该类必须声明为抽象类,该方法也必须声明为抽象。
3、抽象类不能被实例化,但不代表它不可以有构造函数,抽象类可以有构造函数,备继承类扩充

--------------------------------------------
例如:我有一个抽象类BaseStudentDAO,类中有一个非抽象方法load,我该怎样调用load这个方法?

想调用BaseStudentDAO中的非抽象方法load,如果load方法是static的,则可以直接BaseStudentDAO.load() 就可以了;
如果是非static的则必须需要一个继承的非抽象类,然后用这个非抽象类的实例来调用load方法,或者这个非抽象类的实例被cast成 BaseStudentDAO,然后调用。
如:继承BaseStudentDAO的非抽象类:BaseStudentDAOSub,可以用一下方法调用:
1、BaseStudentDAOSub bsds = new BaseStudentDAOSub(); bsds.load();
2、BaseStudentDAO bsd = new BaseStudentDAOSub(); bsd.load();

当然,也要考虑这个方法应该是public或protected的。如果是private的就一切免谈了。

----------------------------------------
抽象类BaseStudentDAO分2种,
1、interface 类型,那么所有方法不用声明会自动默认为public类型,直接访问就行,但是这样编译不会有问题,如果没有实现这个方法,运行有问题。

2、abstratct 类型,如果声明为public ,那么和上面一样直接访问,如果为protected 则需要继承才可以访问。如果是private那就是不想让你访问,除非你写一个这个类的内部类才可以访问。

----------------------------------------

抽象类不能实例化,要实例化抽象类的话必须将实现抽象化类的类的对象赋给抽象类对象
抽象类  实例=new 抽象类对象();

原文地址:https://www.cnblogs.com/xinxindiandeng/p/1357552.html