抽象类
抽象类(abstract)
1. 什么是抽象类和抽象方法?
abstract
修饰符可以修饰类(即抽象类),可以修饰方法(即抽象方法)。
1.1 抽象类
//创建一个类,类名Action。用abstract修饰这个类,那么类Action就是抽象类
public abstract class Action{}
1.2 抽象方法
//在抽象类Action中,创建方法,方法名为doSomething。用abstract修饰这个方法,这个方法就是抽象方法
public abstract class Action{
//正常创建一个普通方法
//public void doSomething(){}
/*抽象方法
1.用abstract修饰这个方法。(写法也不同了:abstract抽象方法 ,只有方法的名字,没有方法的实现,让子类去实现)
2.抽象方法必须写在抽象类中(抽象类中可以写抽象方法和普通方法,抽象类中也可以不写抽象方法)
*/
public abstract void doSomething();//abstract抽象方法 ,只有方法的名字,没有方法的实现
//抽象类中可以写普通方法
public void say(){
System.out.println("Hello");
}
}
2. 注意点:
2.1 抽象类和抽象方法的一些要点
/*抽象类和抽象方法的一些要点
抽象类特点:
1.不能new抽象类,只能靠子类去实现它:约束!
2.抽象类中可以写抽象方法和普通方法,抽象类中也可以不写抽象方法,但是抽象方法只能在抽象类中写!
3.抽象类中的抽象方法,只有方法的声明,没有方法的实现。抽象方法的实现是让子类(非抽象类)实现的,若子类也是抽象类,则让子子类去实现!
4.抽象类的所有方法,继承了抽象类的子类,子类必须要实现抽象类的方法(重写抽象父类的方法)~ 除非子类也是抽象类,则不用实现,交给子子类实现。
子类继承抽象类,就必须去实现抽象类中没有实现的抽象方法,否则子类也要声明为抽象类。
5.抽象的抽象:约束!
抽象类的局限性:
1.abstract 抽象类:类 extends :单继承,java中没有多继承,但是接口可以多继承
* */
3. 思考
//博客思考
//题1:抽象类既然不能new对象,那么抽象类存在构造器吗?
按照我个人理解,new对象本质是在调用构造器,那么抽象类不能new对象,可能是因为它没有构造器(没有构造器的可能小,因为创建类之后就有了构造器)
答案二:也可能是因为它加了abstract后,不调用构造器!!!!!<=====我觉得是这种
百度:抽象类是由构造器的(抽象类可以有构造方法,只是不能直接创建抽象类的实例对象而已。)
//题2:抽象类存在的意义是什么?
节省代码,提高开发效率
4. 代码演示
4.1 抽象类Action
//abstract 抽象类:类 extends :单继承,java中没有多继承,但是接口可以多继承
// 分清楚抽象方法和接口
public abstract class Action /*extends Object*/{
//public Action(){}
//约束~有人帮我们实现 abstract抽象方法 ,只有方法的名字,没有方法的实现
//public abstract void doSomething(){}
public abstract void doSomething();//抽象方法
public void run(){
System.out.println("d");
}
public Action(){}
}
4.2 实现抽象类的子类A
4.2.1 子类A不是抽象类
//A要重写Action类中的doSomething()方法
//抽象类的所有方法,继承了抽象类的子类,子类必须要实现抽象类的方法(重写抽象父类的方法)~ 除非子类也是抽象类,则不用实现,交给子子类实现
public class A extends Action{
@Override
public void doSomething() {
}
}
4.2.2 子类A也是抽象类
//继承抽象类的子类A也是抽象类的话,A可以不用去实现抽象类
//抽象类可由子子类(非抽象类)去实现
public abstract class A extends Action{
}