二、Java初级--10、多态

面向对象的三大特点:继承、封装、多态
重载(overloading):一个类中有多个函数,且函数名相同,但每个函数包含的参数不一样
重写(overriding):在父类中有一个函数,在子类中有一个相同名称的函数,也叫做覆盖。

重载的概念,举例:


结构
package javastudy;

public class T1 {
    public void print(String s){
        System.out.println(s);//重载,函数名相同,但参数不同
    }
    public void print(int i){
        System.out.println(i);
    }
}
package javastudy;

public class Testit {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        T1 t=new T1();
        t.print("hello");
        t.print(100);//print被重载了2次
    }
}

重写的概念,举例:
使用ctrl+shift+s,可以重写父类中的方法


重写eat方法
结构

Animal类

package javastudy;

public class Animal {
    public void eat(){
        System.out.println("动物吃什么呢?");
    }
}

Cat类

package javastudy;

public class Cat extends Animal {

    @Override
    public void eat() {
        // TODO Auto-generated method stub
//      super.eat();
        System.out.println("猫吃小鱼!");
    }
    
}

Dog类

package javastudy;

public class Dog extends Animal {

    @Override
    public void eat() {
        // TODO Auto-generated method stub
//      super.eat();  //super即父类的意思
        System.out.println("狗啃骨头!");
    }

}

Person类

package javastudy;

public class Person extends Animal {

    @Override
    public void eat() {
        // TODO Auto-generated method stub
        super.eat(); //调用父类中的eat()
    }
    

}

testit类

package javastudy;

public class Testit {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
//      T1 t=new T1();
//      t.print("hello");
//      t.print(100);
        Animal a1=new Animal(); //调用构造函数,没有就调用默认的构造函数
        Animal a2=new Dog();//可以用父类引用(地址)指向子类的对象;可以用父类的对象存放子类的引用
        Animal a3=new Cat();
        Animal a4=new Person();
        a1.eat();
        a2.eat();//如果子类中有重写,则调用子类的,没有重写,则调用父类的
        a3.eat();
        a4.eat();
        
        
    }
}

执行结果

你可能感兴趣的:(二、Java初级--10、多态)