多态总结
- 使用父类类型的引用(类型),指向子类的对象(new); Animal a = new dog();
- 该引用只能调用父类中定义的方法,不能调用子类中独有的方法;
- 在多态中,子类可以调用父类所有的方法;
- 多态主要体现在重载和重写。相同的行为有不同的实现方式。
- 多态主要应用于多态参数(一个方法中有父类做参数类型,意味着该方法接受任何一个子类对象实参)和多态集合(比如声明一个动物数组,该数组的元素可以接受任何一个子类对象数据)。
- 如果子类中重写了父类中的一个方法,该方法将会被调用子类中的方法;
抽象类和抽象方法
1.抽象类中,可以定义抽象方法,也可以定义具体方法。
2.子类继承抽象类,必须重写所有抽象方法。具体方法不受控制
3.抽象方法的意义在于,使用多态变量,可以利用抽象方法进行多态调用。
4.抽象父类,可以直接new一个父类数组,实际是生成一个连续空间,具体的数组变量不能new抽象父类。
5.抽象方法修饰符不能小于抽象类的缺省修饰符。
如果一个类中的方法,只有定义方法,没有方法具体时间,称为抽象类。拥有抽象方法的类叫抽象类,abstract定义。抽象类不能直接实例化,只能指向子类对象完成实例。
public abstract class Animal{
public abstract void eat();这是一个抽象方法
public void speak(){
method;
}
}
不能有花括号,
括号后面必须有分号。
Animal[] arr= new Animal[3];
arr[0] = new Dog();
arr[1] = new Fish();
for(int i = 0; i< arr.length;i++){ //for循环遍历所有数组的breath方法
arr[i].breath();
}
//for each循环,类型+变量名+:+数组名(已经申明好的数组)
for(Animal x : arr){
x.breath();
}
可以在子类重写方法后
,用 super.speak();来调用被重写的父类原方法。
class Dog extends Animal{
public void breath(){
super.speak();
System.out.println("");
}
}
接口
- 类和类的行为抽象,称为接口
- 接口的方法只能是抽象方法,接口里的权限不管写不写都是public ,都是abstract(抽象)。
- 接口可以看做抽象类的特例。 抽象类(abstract class 比如抽象父类)中可以有抽象方法和属性和具体方法。但接口中只能有抽象方法。定义接口使用interface,实现接口用implement。
package OO0914duotai;
public
interface IWash { //生成接口,不是class,是interface
public void wash(); //定义抽象方法,洗衣服
}
class Mun
implements IWash{ //生成接口类MUn
@Override
public void wash() { //重写接口的方法,洗衣服
System.out.println("手洗");
}
}
class Washer implements IWash{
@Override
public void wash() {
System.out.println("发动机搅动");
}
}
实现
package OO0914duotai;
public class TestWash {
public static void main(String[] args) {
// TODO 自动生成的方法存根
IWash m = new Mun();//只能指向实现类
IWash w = new Washer();
m.wash();
w.wash();
}
}
如何使用接口
如果一个方法参数为接口类型,意味着,可以传递该接口任何实现类对象。
接口中,可以定义变量,其修饰符是public static final
1.新建一个接口,并产生接口类
package OO0914duotai;
public interface ICatchMouse {
public void CatchMouse();
}
class knife implements ICatchMouse{
@Override
public void CatchMouse() {
System.out.println("捅死它");
}
}
2.新建一个使用类,声明一个方法,将接口作为形参传入,并在方法里定义 形参.接口方法
public class Wife {
public void killMouse(ICatchMouse m){
m.CatchMouse();
}
}
3.新建一个测试类,new一个实用类变量,实用类变量.方法( new 接口方法())
Wife w = new Wife();
w.killMouse();