java第七章 多态 课堂笔记/作业

什么是多态:
用同一个引用类型,使用不同的实例,得到不同的结果
实现对台的三个要素是:
继承、方法重写、父类引用指向子类对象

1、使用多态时:是使用父类的类型,但是对象还是子类的对象
2、如果子类不重写父类的方法,那么当使用多态时,是不能调用子类的独有的方法(谁的类型,调用谁的方法)
3、但是当子类重写父类方法,使用多态调用的方法,看似是父类中的方法,但实际是子类中重写父类的那个方法

当:父类引用指向子类对象/父类类型创建子类对象时
这个对象不能够使用子类独有的方法

当使用多态时:创建对象必须是:父类类型 对象名 = new 子类构造方法();

抽象类:表示这个类的对象是不存在的,因此抽象类不能够被实例化对象
但是可以用它的类型来创建对象,通常是创建子类对象,也就是多态

因此不需要具体实现的方法,可以把这个方法定义为抽象方法
(抽象方法没有方法体)

抽象类中可以有非抽象方法和抽象方法。但是抽象方法只能存在于抽象类中。

实现多态的两种方式:使用父类作为方法参数、使用父类作为方法返回值

什么是多态:
用同一个引用类型,使用不同的实例,得到不同的结果
实现对台的三个要素是:
继承、方法重写、父类引用指向子类对象

1、使用多态时:是使用父类的类型,但是对象还是子类的对象
2、如果子类不重写父类的方法,那么当使用多态时,是不能调用子类的独有的方法(谁的类型,调用谁的方法)
3、但是当子类重写父类方法,使用多态调用的方法,看似是父类中的方法,但实际是子类中重写父类的那个方法

当:父类引用指向子类对象/父类类型创建子类对象时
这个对象不能够使用子类独有的方法

当使用多态时:创建对象必须是:父类类型 对象名 = new 子类构造方法();

抽象类:表示这个类的对象是不存在的,因此抽象类不能够被实例化对象
但是可以用它的类型来创建对象,通常是创建子类对象,也就是多态

因此不需要具体实现的方法,可以把这个方法定义为抽象方法
(抽象方法没有方法体)

抽象类中可以有非抽象方法和抽象方法。但是抽象方法只能存在于抽象类中。

实现多态的两种方式:使用父类作为方法参数、使用父类作为方法返回值

什么是多态:
用同一个引用类型,使用不同的实例,得到不同的结果
实现对台的三个要素是:
继承、方法重写、父类引用指向子类对象

1、使用多态时:是使用父类的类型,但是对象还是子类的对象
2、如果子类不重写父类的方法,那么当使用多态时,是不能调用子类的独有的方法(谁的类型,调用谁的方法)
3、但是当子类重写父类方法,使用多态调用的方法,看似是父类中的方法,但实际是子类中重写父类的那个方法

当:父类引用指向子类对象/父类类型创建子类对象时
这个对象不能够使用子类独有的方法

当使用多态时:创建对象必须是:父类类型 对象名 = new 子类构造方法();

抽象类:表示这个类的对象是不存在的,因此抽象类不能够被实例化对象
但是可以用它的类型来创建对象,通常是创建子类对象,也就是多态

因此不需要具体实现的方法,可以把这个方法定义为抽象方法
(抽象方法没有方法体)

抽象类中可以有非抽象方法和抽象方法。但是抽象方法只能存在于抽象类中。

实现多态的两种方式:使用父类作为方法参数、使用父类作为方法返回值

作业:

package com.duotai2;
/**
 * Pet.java 
 * @author 陈
 *2019.1.21
 */
public class Pet {
    //创建宠物类
    
    //定义设置私有属性 :健康值
    private int health;
    
    //生成get/set方法
    public int getHealth() {
        return health;
    }

    public void setHealth(int health) {
        this.health = health;
    }
    
    //创建宠物类的方法make
    public void make() {
        System.out.println("我现在健康值是:"+this.getHealth());
    }
    
}
package com.duotai2;
/**
 * Dog.java
 * @author 陈
 *2019.1.21
 */
public class Dog extends Pet {
    //创建狗狗类 继承 宠物类
    
    //创建狗狗的私有方法pick
    public void pick() {
        System.out.println("陪狗狗玩接飞盘的游戏");
        this.setHealth( this.getHealth()-1);
    }
}
package com.duotai2;
/**
 * Penguin.java
 * @author 陈
 *2019.1.21
 */
public class Penguin extends Pet {
    //创建企鹅类 继承 宠物类
    
    //创建企鹅的私有方法swim
    public void swim() {
        System.out.println("让企鹅在南极游泳!");
        this.setHealth(this.getHealth()-3);
    }
}
package com.duotai2;
/**
 * Test.java
 * @author 陈
 *2019.1.21
 */
public class Test {
    //创建一个测试类
    
    public static void main(String[] args) {
        Pet pet = new Penguin();
        //子类到父类的转换,
        pet.setHealth(80);
        pet.make();
        
        //判断如果pet是Dog类,则将pet转换为Dog类型,执行Dog类特有的方法
        //如果pet是Penguin类,则将pet转换为Penguin类型,执行Penguin类特有的方法
        if(pet instanceof Dog) {
            Dog dog = (Dog)pet;
            dog.pick();
            dog.make();
        }else if(pet instanceof Penguin) {
            Penguin pen = (Penguin)pet;
            pen.swim();
            pen.make();
        }
    }
}

package com.duotai;

public class Pet {
private int health; public int getHealth() { return health; } public void setHealth(int health) { if(health<0||health>100) { System.out.println("输入的健康值超出范围,默认为60"); health = 60; } this.health = health; } public void make() { System.out.println(this.getHealth()); } public void eat() { } }
package com.duotai;

public class Dog extends Pet {
    
    public void eat() {
        
        System.out.println("给狗狗喂狗粮");
       this.setHealth(getHealth()+3);
        
    }
}
package com.duotai;

public class Penguin extends Pet {
    public void eat() {
        super.eat();
        System.out.println("给企鹅喂鱼");
            super.setHealth(getHealth()+5);
        
        
    }
}
package com.duotai;

public class Master {
    
    public void feeding(Pet pet) {
        if(pet.getHealth()<80) {
            pet.eat();
        }else if(pet.getHealth()>=100) {
            System.out.println("吃饱了!");
        }
    }
}
package com.duotai;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //父类“宠物类” 引用指向子类“狗类”对象,子类到父类的转换
        Pet dog = new Dog();
        System.out.println("请输入狗狗的健康值");
        dog.setHealth(sc.nextInt());
        
        Master master = new Master();
        master.feeding(dog);
        dog.make();

        //父类“宠物类” 引用指向子类“企鹅类”对象,子类到父类的转换
        Pet pen = new Penguin();
        System.out.println("请输入企鹅的健康值");
        pen.setHealth(sc.nextInt());    
        master.feeding(pen);
        pen.make();
        
    }
}

原文地址:https://www.cnblogs.com/qq993411626------/p/10300941.html