抽象类
抽象类:包含抽象方法的类。
- (1) 抽象方法由abstract修饰,类也需要由abstract修饰;
- (2)抽象方法不能被private所修饰,可以被public、protected修饰;如果不加访问修饰限定符,那么默认为public。
- (3)抽象类中可以有非抽象方法;
- (4)抽象类不能创建实例对象。(new)
abstract class Fish{
//抽象类中的抽象方法不予以实现; 当有一个类继承了当前的抽象类后,需要实现。
public abstract void swim();
protected abstract void eat();
//private abstract void fly();//error 抽象方法不能被private所修饰
public void fun1(){
System.out.println("abstract Fish fun1()");//抽象类中的非抽象方法,要进行实现
}
}
抽象类的派生类:
- (1)如果是普通类,那么必须实现抽象类的抽象方法;
- (2)如果是抽象类,可以不实现基类的抽象方法。
class JinLi extends Fish{
public JinLi(){
System.out.println("JinLi() init");
}
public void swim(){
System.out.println("JinLi:popo");
}
}//普通类
abstract class NianYu extends Fish{
public NianYu() {
System.out.println("NianYu() init");
}
}//抽象类
abstract class DaJinLi extends Fish{
public void swim(){
System.out.println("JinLi:popo");
}
}
public class AbstractObject {
public static void main(String[] args) {
JinLi jinli = new JinLi();
jinli.swim();
}
}
JinLi() init
JinLi:popo
- 抽象类的使用场景:
(1)因为抽象类不能实例化对象,所以必须要有子类来继承它之后才能使用。这样就可以把一些具有相同属性和方法的组件进行抽象,这样更有利于代码和程序的维护。
比如本科和研究生可以抽象成学生,他们有相同的属性和方法。这样当你对其中某个类进行修改时会受到父类的限制,这样就会提醒开发人员有些东西不能进行随意修改,这样可以对比较重要的东西进行统一的限制,也算是一种保护,对维护会有很大的帮助。
(2)当又有一个具有相似的组件产生时,只需要实现该抽象类就可以获得该抽象类的那些属性和方法。
比如学校又新产生了专科生这类学生,那么专科生直接继承学生,然后对自己特有的属性和方法进行补充即可。这样对于代码的重用也是很好的体现。
Tips:
@ 面试问题:
抽象类和普通类的区别 ? - (1)抽象类不能被实例化;
- (2)抽象方法必须是public或者protected,或者不写;
- (3)抽象类被abstract所修饰;
- (4)抽象方法不能在抽象类中实现。
密封类
当一个类,被final所修饰的时候。称为密封类。
- (1)该类不能作用于基类,就算派生类也被final所修饰也不可以。作用:防止有意的派生。
- (2)密封方法:不能被重写。
public final void fun1() {
System.out.println(“Person init()”);
}
final class Person{
private String name;
public String sex;
private int age;
public Person(){
System.out.println("final() init");
}
}
//class Student extends Person{}//密封类不能被继承 error
// final class Studebt extends Person{}//派生类被final所修饰也不能 error
Over…经过最棒的仔的建议,希望有所改进哈hahhaha