莞城网站推广,个人网站制作的步骤,建筑公司是做什么的,南京成旭通网站建设公司怎么样抽象一直以来都是人们所神往的艺术形式#xff0c;这点从梵高#xff0c;毕加索等艺术家的身上就可以看出。抽象所代表的是一种形式上的美感#xff0c;颇有一种虚无缥缈只可意会不可言传的意味。但是JAVA中的抽象类与抽象方法相对而言就更加直接了#xff0c;它给我的感觉… 抽象一直以来都是人们所神往的艺术形式这点从梵高毕加索等艺术家的身上就可以看出。抽象所代表的是一种形式上的美感颇有一种虚无缥缈只可意会不可言传的意味。但是JAVA中的抽象类与抽象方法相对而言就更加直接了它给我的感觉更像是文章的副标题本身不发挥什么作用但是却可以从中展开许多功能。 用关键字abstract修饰的类称为abstract类抽象类比如
abstract classA{
}
用关键字abstract修饰的方法称为abstract方法抽象方法例如
abstract int min int xint y 对于abstract方法只允许声明不允许实现因为没有方法体毕竟叫抽象当然不能实实在在的让你实现并且不允许使用final和abstract同时修饰一个方法或者类也不允许使用static修饰abstract方法。也就是说abstract方法只能是实例方法不能是类方法。 既然abstract类和方法这么特殊我们就必须对比一下它和普通类与方法之间的区别了
1.abstract类中可以有abstract方法 abstract类中可以有abstract方法也可以有非abstract方法 非abstract类中不可以有abstract方法
2.abstract类不能使用new运算符创建对象
但是如果一个非抽象类是抽象类的子类这时候我们想要创建该对象呢这时候它就必须要重写父类的抽象方法并且给出方法体这也就是说明了为什么不允许使用final和abstract同时修饰一个类或者方法的原因。
重点常考final和abstractprivate和abstractstatic和abstract这些是不能放在一起的修饰符因为abstract修饰的方法是必须在其子类中实现覆盖才能以多态方式调用以上修饰符在修饰方法时期子类都覆盖不了这个方法final是不可以覆盖private是不能够继承到子类所以也就不能覆盖static是可以覆盖的但是在调用时会调用编译时类型的方法因为调用的是父类的方法而父类的方法又是抽象的方法又不能够调用所以上的修饰符不能放在一起。
3.abstract类的子类
如果一个非abstract类是abstract类的子类它必须重写父类的abstract方法也就是去掉abstract方法的abstract修饰并给出方法体。
如果一个abstract类是abstract类的子类它可以重写父类的abstract方法也可以继承父类的abstract方法。
下面举个例子
abstract class GirlFriend{ //抽象类封装了两个行为标准
abstract void speak();
abstract void cooking();
}
class ChinaGirlFriend extends GirlFriend{
void speak(){
System.out.println(你好);
}
void cooking(){
System.out.println(水煮鱼);
}
}
class AmercanGirlFriend extends GirlFriend{
void speak(){
System.out.println(hello);
}
void cooking(){
System.out.println(roast beef);
}
}
class boy{
GirlFriend friend
void setGirlFriendGirlFriend f{
friendf
}
void showGirlFriend{
friend.speaking();
friend.cooking();
}
} public class text{
public static void main(String args[]){
GirlFriend girl new ChineseGirlFriend(); //这里girl是上转型对象
Boy boynew boy();
boy.setGirlFriend(girl);
boy.showGirlFriend();
girlnew AmericanGirlFriend(); //girl 是上转型对象
boy.setGirlFriend(girl);
boy.showGirlFriend();
}
}