比喻:画家在外面看到事物,先速写一下,画个大概,然后回到画室再具体画细节。
写论文时,先摘要,写摘要也很需要水平,然后再根据摘要写论文,补充论文的具体内容。
而abstract类就像摘要和速写一样。
1.abstract类中可以有abstract方法
abstract class A{
abstract int min(int x,int y); //没有方法体
}
当然,abstract类也可以不写abstract方法,只是这样做,就浪费了abstract,白写了
2.abstract类不能用new运算符创建对象
A a;可以用abstract类声明对象
newA();但是不可以new它 (声明对象可以但不能new这个类)
3. abstract类的子类
我的理解:abstract类必须有子类,就像速写一样,必须要把它的细节画具体,才能是一副完整美丽的画;就像写论文一样,光写摘要,不写论文的内容,那就不是一篇论文了,那摘要写了也没什么意义了。
所以abstract类必须要有子类,才有意义(这也就是为什么不能用final关键字修饰abstract类和abstract方法的原因,abstract类必须要有子类,不然就没意义了)
书上:如果一个非abstract类是abstract类的子类,它必须重写父类的abstract方法,即去掉abstract方法的abstract修饰,并给出方法体。如果一个abstract类是abstract类的子类,它可以重写父类的abstract方法,也可以继承父类的abstract方法。
不允许使用final和abstract类同时修饰一个方法或类,也不允许使用static修饰abstract方法,即abstract方法必须是实例方法。
class B extends A{
int min(int x,int y){
}
abstract类的子类必须重写abstract类的abstract方法(就是去掉abstract关键字,剩下的抄一遍都可以,方法体不写也行),比如这个例子:我必须要方法min能求最小值,所以重写了A类中的min方法。
特殊情况:如果abstract类的子类也是个abstract类,那么无所谓,你愿意重写就重写,要不愿意重写就啥也不写,老老实实继承;
如果子类不是abstract类,也就不会让你老老实实继承,要求你必须得重写。(所以一定不能用final修饰抽象方法 ,因为一定会重写)
4.abstract类的对象作上转型对象
我只要用A a;(用A声明一个对象a就可以了),我也不需要去newA,而且也不能够new抽象类A;
但我可以直接a =new B();,不用去newA,因为对象的上转型对象也能够去调用重写的方法。
5.理解abstract类
注重行为标准,而不是细节,细节留给子类
两个程序理解abstract类:
package P128继承与多态抽象类的改写;
abstract class 动物{
abstract void cry();
}
class 狗 extends 动物{
void cry() {
System.out.println("汪汪....");
}
}
class 猫 extends 动物{
void cry(){
System.out.println("喵喵....");
}
}
public class Example5_111 {
public static void main(String[] args) {
动物 a;
a=new 狗();
a.cry();
a=new 猫();
a.cry();
}
}
abstract class GirlFriend{ //抽象类,封装了两个行为标准
abstract void speak();
abstract void cooking();
}
class ChinaGirlFriend extends GirlFriend{
void speak(){
System.out.println("你好");
}
void cooking(){
System.out.println("水煮鱼");
}
}
class AmericanGirlFriend extends GirlFriend{
void speak(){
System.out.println("hello");
}
void cooking() {
System.out.println("roast beef");
}
}
class Boy{
GirlFriend friend;
void setGirlFriend(GirlFriend f){
friend = f;
}
void showGirlFriend(){
friend.speak();
friend.cooking();
}
}
public class Example5_12 {
public static void main(String[] args) {
GirlFriend girl=new ChinaGirlFriend();
Boy b1=new Boy();
b1.setGirlFriend(girl);
b1.showGirlFriend();
girl =new AmericanGirlFriend();
b1.setGirlFriend(girl);
b1.showGirlFriend();
}
}
TRANSLATE with x
English
Arabic | Hebrew | Polish |
Bulgarian | Hindi | Portuguese |
Catalan | Hmong Daw | Romanian |
Chinese Simplified | Hungarian | Russian |
Chinese Traditional | Indonesian | Slovak |
Czech | Italian | Slovenian |
Danish | Japanese | Spanish |
Dutch | Klingon | Swedish |
English | Korean | Thai |
Estonian | Latvian | Turkish |
Finnish | Lithuanian | Ukrainian |
French | Malay | Urdu |
German | Maltese | Vietnamese |
Greek | Norwegian | Welsh |
Haitian Creole | Persian | |
TRANSLATE with
COPY THE URL BELOW
Back
EMBED THE SNIPPET BELOW IN YOUR SITE
Enable collaborative features and customize widget: Bing Webmaster Portal
Back