Java零基础入门到精通_Day 12

发布于:2024-05-03 ⋅ 阅读:(24) ⋅ 点赞:(0)

1.多态

package Base_se.Base_012.b01;

public class Animal {
    public void eat() {
        System.out.println("动物吃东西");
    }
}

package Base_se.Base_012.b01;

public class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
}


package Base_se.Base_012.b01;

public class AnimalDemo {
    public static void main(String[] args) {
        // 有父类引用指向子类对象
        Animal a = new Cat();
    }
}

2.多态中成员访问特点

package Base_se.Base_012.b02;

public class Animal {
    public int age =40;
    public void eat() {
        System.out.println("动物吃东西");
    }
}

package Base_se.Base_012.b02;

public class Cat extends Animal {
    public int age = 20;
    public int weight = 10;
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }

    public void play() {
        System.out.println("玩游戏");
    }
}

package Base_se.Base_012.b02;

public class AnimalDemo {
    public static void main(String[] args) {
        // 有父类引用指向子类对象
        Animal a = new Cat();

        // 访问成员变量:编译和运行都要看左边的
        System.out.println(a.age); //40
//        System.out.println(a.weight);
        // 访问成员方法 编译左边 运行右边
        a.eat();
//        a.play();
    }
}

3.多态的利弊

package Base_se.Base_012.b03;

public class Animal {

    public void eat() {
        System.out.println("动物吃东西");
    }
}


package Base_se.Base_012.b03;


public class Cat extends Animal {

    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }

}

package Base_se.Base_012.b03;

public class Pig extends Animal{
    @Override
    public void eat() {
        System.out.println("猪");
    }
}

package Base_se.Base_012.b03;

public class Dog extends Animal{
    @Override
    public void eat() {
        System.out.println("狗");
    }
    public void Look(){
        System.out.println("看");
    }
}


package Base_se.Base_012.b03;

public class AnimalOpti {
//    public void useAnimal(Cat c){
//        c.eat();
//    }
//
//    public void useAnimal(Dog d){
//        d.eat();
//    }
    public void useAnimal(Animal a){
//        Animal a = new Cat();
//        Animal a = new Cat();
        a.eat();
//        a.look(); 不能访问的子类的特有方法
    }
}

package Base_se.Base_012.b03;


public class AnimalDemo {
    public static void main(String[] args) {
        // 创建动物操作类的对象,调用方法
        AnimalOpti ao = new AnimalOpti();
        Cat cat = new Cat();
        ao.useAnimal(cat);

        Dog d = new Dog();
        ao.useAnimal(d);

        Pig pig = new Pig();
        ao.useAnimal(pig);

    }
}


4.多态中的转型

package Base_se.Base_012.b04;

public class Animal {
    public void ext(){
        System.out.println("动物吃东西");
    }
}


package Base_se.Base_012.b04;

public class Cat extends Animal{
    @Override
    public void ext(){
        System.out.println("猫吃鱼");
    }

    public void play(){
        System.out.println("玩耍");
    }

}


package Base_se.Base_012.b04;

public class AnimalDemo {
    /*
    * 向上转型:从子到父 父类引用指向子类对象
      向下转型:从父到子 父类引用转为子类对象
    * */
    public static void main(String[] args) {
        // 多态
        Animal a = new Cat(); // 向上转型
        a.ext();
//        a.play();

//        Cat cat = new Cat();
//        cat.ext();
//        cat.play();
        // 向下转型

        Cat c = (Cat) a; //强制转换为Cat 类型的
        c.ext();
        c.play();

    }
}

5.多态内存图解

6.案例

package Base_se.Base_012.b05;

public class Animal {
    private String name;
    private int age;

    public Animal() {
    }

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void eat(){
        System.out.println("动物吃东西");
    }
}



package Base_se.Base_012.b05;

public class Cat extends Animal{
    public Cat() {
    }

    public Cat(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat() {
        System.out.println("猫");
    }
}



package Base_se.Base_012.b05;

public class AnimalDemo {
    public static void main(String[] args) {
        // 创建猫类对象
        Animal a = new Cat();
        a.setName("加菲");
        a.setAge(12);
        System.out.println(a.getName()+","+a.getAge());
        a.eat();

        a = new Cat("加菲",13);
        System.out.println(a.getName()+","+a.getAge());
        a.eat();


    }
}

7.抽象类

package Base_se.Base_012.b006;

public abstract class Animal {
    //    public void eat(){
//        System.out.println("吃东西");
//    }
    // 抽象方法
    // 抽象方法必须是抽象类 抽象类可以没有抽象方法 但是没什么意义
    public abstract void eat();

    public void sleep() {
        System.out.println("睡觉");
    }
    
}


package Base_se.Base_012.b006;

public class Cat extends Animal{
    @Override
    public void eat() {
        System.out.println("猫");
    }
}

package Base_se.Base_012.b006;

public  class Dog extends Animal{

    @Override
    public void eat(){
        System.out.println(111);
    }
}

package Base_se.Base_012.b006;

public class AnimalDemo {
    public static void main(String[] args) {
        Animal a = new Cat();
        a.eat();
        a.sleep();

        Animal d = new Dog();
        d.eat();
    }

}







8.抽象类的成员特点

package Base_se.Base_012.b07;

import javax.swing.*;

public abstract class Animal {
    private int age = 20;
    private final String city = "北京";

    public Animal(int age) {
        this.age = age;
    }

    public Animal() {
    }

    public void show() {
        age = 40;
        System.out.println(age);
        System.out.println(city);
    }

    public abstract void eat();


}


package Base_se.Base_012.b07;

public class Cat extends Animal{
    @Override
    public void eat(){
        System.out.println("猫");
    }

}


package Base_se.Base_012.b07;

public class AnimalDemo {
    public static void main(String[] args) {
        Animal a = new Cat();
        a.eat();
        a.show();
    }
}


网站公告

今日签到

点亮在社区的每一天
去签到