标签:子类 abstract class new 重写 方法 void
比喻:画家在外面看到事物,先速写一下,画个大概,然后回到画室再具体画细节。
写论文时,先摘要,写摘要也很需要水平,然后再根据摘要写论文,补充论文的具体内容。
而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{ //抽象类,封装了两个行为标准TRANSLATE with x English TRANSLATE with COPY THE URL BELOW Back EMBED THE SNIPPET BELOW IN YOUR SITE Enable collaborative features and customize widget: Bing Webmaster Portal Back
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();
}
}
标签:子类,abstract,class,new,重写,方法,void 来源: https://www.cnblogs.com/xianbing2022/p/16441292.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。