java学习第19天

多态转型示例:

package jicheng.com;

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

    public int getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }

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

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

    public Animal() {
    }

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

package jicheng.com;

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

    public Cat() {
    }

    public void playgame(){
        System.out.println("猫玩毛球");
    }
    public void eat(){
        System.out.println("猫吃鱼");
    }
}

package jicheng.com;

public class Dog extends Animal {
    public Dog(int age, String name) {
        super(age, name);
    }

    public Dog() {
    }
    public void eat(){
        System.out.println("狗吃骨头");
    }
}

package jicheng.com;
/*
有继承和实现关系,有方法重写,有父类引用指向子类对象(动物 animal= new 猫();)。
 */
public class Demo1 {
    public static void main(String[] args) {
       Animal a=new Cat();//向上转型
      
a.eat();
        a=new Cat(5,"加菲");
        System.out.println(a.age+" "+a.name);
        Cat c=(Cat)a;//向下转型
       
c.playgame();
        Animal B=new Dog();
        B.eat();
        B=new Dog(6,"汪汪狗");
        System.out.print(B.age+B.name);
    }
}

D:\Java\jdk-16.0.1\bin\java.exe -Didea.launcher.port=62796 "-Didea.launcher.bin.path=D:\IntelliJ IDEA 2018.2.8\bin" -Dfile.encoding=UTF-8 -classpath "C:\Users\dell\IdeaProjects\java学习\out\production\java学习;D:\IntelliJ IDEA 2018.2.8\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMainV2 jicheng.com.Demo1

猫吃鱼

5 加菲

猫玩毛球

狗吃骨头

6汪汪狗

Process finished with exit code 0

一个方法没有方法体被称为抽象方法,抽象方法必须定义在抽象类中,但抽象类可以没有抽象方法。

抽象类特点:

抽象类和抽象方法必须使用abstract关键字修饰

Public abstract class 类名{}

Public abstract void(方法类型) 方法名();

抽象类不能直接实例化,但抽象类可以参照多态性形式通过子类对象实例化,这叫抽象类多态。

抽象类的子类,要么重写抽象类中的抽象方法,要么是抽象类。

抽象类的成员特点

成员变量:可以是常量,也可以是变量

构造方法:有构造方法,但不能实例化,构造方法用于子类访问父类数据的初始化。

成员方法:可以有抽象方法:限定子类必须完成某些动作,也可以有非抽象方法,提高代码复用性。

抽象类示例:

package jicheng.com;

public abstract class  Animal1 {

    private int age;
    private String name;
    private int weight;

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

    public Animal1() {
    }

    public int getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }

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

    public int getWeight() {
        return weight;
    }

    public void setWeight(int weight) {
        this.weight = weight;
    }

    public abstract void eat();
    public abstract void speak();
    public abstract void show();
}

package jicheng.com;

public class Cat1 extends Animal1 {
    public Cat1(int age, String name, int weight) {
        super(age, name, weight);
    }

    public Cat1() {
    }

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

    public void speak(){
        System.out.println("喵喵");
    }

    public  void show(){
        System.out.println(getName()+","+getAge());
    }
}

package jicheng.com;

public class Dog1 extends Animal1 {
    public Dog1(int age, String name, int weight) {
        super(age, name, weight);
    }

    public Dog1() {
    }

    public void eat() {
        System.out.println("狗吃骨头");
    }

    public void speak(){
        System.out.println("汪汪");
    }

    public  void show(){
        System.out.println(getName()+","+getAge());
    }
}

package jicheng.com;

public class Demo3 {
    public static void main(String[] args) {
        Animal1 a=new Cat1();
        a= new Cat1(18,"小红",20);
        a.eat();
        a.speak();
        a.show();
        Animal1 b=new Dog1();
        b=new Dog1(19,"小黑",30);
        b.eat();
        b.speak();
        b.eat();
        b.show();
    }
}

D:\Java\jdk-16.0.1\bin\java.exe -Didea.launcher.port=61277 "-Didea.launcher.bin.path=D:\IntelliJ IDEA 2018.2.8\bin" -Dfile.encoding=UTF-8 -classpath "C:\Users\dell\IdeaProjects\java学习\out\production\java学习;D:\IntelliJ IDEA 2018.2.8\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMainV2 jicheng.com.Demo3

猫吃鱼

喵喵

小红,18

狗吃骨头

汪汪

狗吃骨头

小黑,19

 

Process finished with exit code 0   0804

接口概述:

接口是一种公共的规范标准,只要符合规范标准,大家都可以通用

Java中的接口体现在对行为的抽象。

接口特点:

(1)接口用关键字interface修饰

      Public interface 接口名{}

(2)类实现接口用implements表示:

      Public class 类名 implements 接口名{}

(1) 接口不能直接实例化:

接口实例化参照多态形式,通过类对象实例化,这叫接口多态。

多态的形式:具体类多态,抽象类多态,接口多态。

多态的前提:有继承或实现关系;有方法重写;有父(类/接口)引用指向(子/实现)类对象。

(2) 接口的实现类:

要么重写接口中的所有抽象方法

要么是抽象类。

posted @ 2021-07-16 20:17  几人著眼到青衫  阅读(32)  评论(0)    收藏  举报