(一)说到抽象类,那么什么是抽象类呢?来个生活中的例子了解一下。比如给一个父类名字是图形,那么他的子类可能会是正方形,三角形,圆形等等,那么像这样的子类他们的面积都能通过公式求出来。现在就给你一个问题让你求出父类图形的面积
1.首先明确一点叫做图形的父类是有面积的
2.只是你不知道是什么图形,所以我们就说父类图形是抽象的
3.子类给出的具体图形是具体的类
(二)
抽象类:抽象方法所在的类,必须是抽象类才行,在class之前写上abstract;
抽象方法:就是加上abstract关键字,然后去掉大括号,直接分号结束;
如何使用抽象方法和抽象类呢
1.不能直接创建new抽象对象
2.必须用一个子类来继承抽象父类
3.子类必须覆盖重写抽象父类当中的所有的抽象方法(去掉abstract补上大括号)
4.进行使用创建子类对象使用
(三)下面来个例子,
定义一个抽象类Animal(动物),定义两个抽象方法eat(吃)和sleep(睡)。
package edu.edu.shengda3;
public abstract class Animal { //抽象类
public abstract void eat(); //抽象方法1
public abstract void sleep(); //抽象方法2
}
这个时候注意正常来说需要定义一个具体的类来继承抽象类,那如果我偏不呢,这个时候可以再来一个抽象的子类Dog(狗)来继承父类Animal,子类复写父类中的方法
package edu.edu.shengda3;
public abstract class Dog extends Animal {
public void eat(){
System.out.println("狗吃骨头");
}
}
到了这一步有人会说不是子类一定要继承父类的所用方法,才能运行成功吗?确实是这样的,但咱们可以继续深究一下。相对于Dog类,我们来两个具体的子类,二哈和金毛。这次Dog成了抽象的父类,二哈和金毛是两个具体的类。
二哈:
package edu.edu.shengda3;
public class Erha extends Dog {
public void sleep(){
System.out.println("呼呼大睡");
}
}
金毛:
package edu.edu.shengda3;
public class Jinmao extends Dog {
public void sleep(){
System.out.println("嘿嘿大睡");
}
}
现在所有的的类都定义完了,来一个main方法,刚在第一点提到抽象类不能直接new,所以我们只能从具体类二哈和金毛下手:
package edu.edu.shengda3;
public class demomain {
public static void main(String[] args) {
Erha e=new Erha();
e.eat();
e.sleep();
System.out.println("=========");
Jinmao j=new Jinmao();
j.eat();
j.sleep();
}
}
输出结果如下:
再次强调:
1.抽象类不能创建对象
Animal an=new Animal();
Dog d =new Dog();//这样都是错误的
2.抽类中不一定要有抽象方法,但一定的是抽象类、
正如Dog代码所示
3.抽象类的子类必须覆写父类的所有方法,除非该子类也是抽象类,正如Dog代码中并没写完Animal中的所有方法,但是对于二哈和金毛这种具体的类必须覆写所有方法。