一、抽象类
1、抽象类:此类中没有包含足够的信息来描绘一个具体对象,就叫做抽象类。
(因为抽象类中可能含有的抽象方法没有具体的实现,所以无法准确描述一个对象,有抽象的意思)
2、抽象方法:只有声明,没有实现(指方法体)。
3、抽象类中可能含有抽象方法,也可能没有。含有抽象方法的类一定是抽象类,抽象类中不一定有抽象方法。
4、抽象类自己不能创建对象(因为包含抽象方法),其余功能与类相同。
5、继承抽象类的类有条件:(1)必须重写抽象类中的所有抽象方法。
(2)将此类也定义为抽象类,继承上一个父类的同时,自己也作为 下一个子类的父类。
例:
abstract class person{ //定义一个抽象类
abstract void speak();//在其中定义一个抽象方法,没有方法体,只有声明。
}
//定义一个继承person类的类,有两种选择。
(1)abstract class chinese expends person{
//其中可以不需要重写父类的抽象方法,可以运行成功。
}
(2)
class chinese extends person{ void speak(){ System.out.println("中国人说中国话");//重写了父类中speak方法,运行成功。 } }
二、多态
存在条件:
(1)要有继承关系(类继承类,类继承抽象类,类继承接口)。
(2)要有方法重写。
(3)父类的引用指向子类对象。
例://定义一个动物抽象类
package com.ff.javaoop.day1; abstract class animal{ int age = 10; public abstract void eat(); public void sleep(){ System.out.println("动物睡"); } public void play(){ System.out.println("动物玩"); } }
//定义一个狗类,继承了动物抽象类
public class dog extends animal { @Override public void eat() { System.out.println("狗吃肉"); } }
//定义一个猫类,继承了动物·抽象类
public class cat extends animal{ @Override public void eat() { System.out.println("猫吃鱼"); } }
//定义喂养类,输出猫狗的食物
public class weiyang { public void feedani(animal anima) { anima.eat(); } }
//定义测试类创建对象
public class Dome { public static void main(String[] args){ animal wc=new dog(); cat mm=new cat();//编译时看左边,运行时看右边 weiyang st1=new weiyang();//体现了多态的扩展性,不需要多次定义方法 st1.feedani(wc); st1.feedani(mm); } }