/*
* a:抽象类和抽象方法必须用abstract关键字修饰
* abstract class 类名 {}
* public abstract void eat();//当不知道该方法具体是怎么实现的
//比如动物吃,你知道它吃什么吗?怎么吃?都不知道
* b:抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者是接口
* c:抽象类不能实例化那么,抽象类如何实例化呢?
* 按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。
* d:抽象类的子类
* 要么是抽象类
* 要么重写抽象类中的所有抽象方法
*/
public abstract class Animal {
abstract void eat();
}
public class Cat extends Animal {
public void eat(){
System.out.println("我吃鱼");
}
public void catchMouse(){
System.out.println("抓老鼠");
}
}
public class Dog extends Animal {
public void eat(){
System.out.println("我吃骨头");
}
public void kanjia(){
System.out.println("我看家");
}
}
public static void main(String[] args) {
// TODO Auto-generated method stubc
//Cat c=new Cat();
//Animal c=new Cat();//多态
//c.eat();
//Animal x=new Animal();
// Cat c=(Cat)x;不能将父类强制转化为子类
//Animal d=new Dog();
//d.eat();
//c.eat();
//Dog d=new Dog();
//d.eat();
function(new Cat());
function(new Dog());
}
public static void function(Animal x){//提取公共属性,提高代码的扩展性
x.eat();
if(x instanceof Cat){
Cat c=(Cat)x;
c.catchMouse();
}
else if(x instanceof Dog){
Dog d=(Dog)x;
d.kanjia();
}
|
|