12.面向对象多态

12.面向对象-多态


12.1 知识点

Java中的vob

// Java中没有vo关键字,也就是virtual(虚函数)和override(重写)
// 我们如果要重写基类的方法,直接在子类中实现同名方法即可
// 它会直接覆盖父类方法!!
// Java中有类似 base 的关键字 super

// 注意:重写是Java会自动补全一个@Override
// 它类似于注释,可有可无,主要是用来帮助我们阅读代码
public abstract class Lesson12_AnimalAbstract
{
    public int age;

    public abstract void Eat();
}

public class Lesson12_AnimalFather extends Lesson12_AnimalAbstract
{
    @Override
    public void Eat()
    {
        System.out.println("父亲吃东西");
    }
}

public class Lesson12_AnimalSon extends Lesson12_AnimalFather implements Lesson12_IFly, Lesson12_IBird
{
    @Override
    public void Eat() {
        super.Eat();
        System.out.println("儿子吃东西");
    }

    @Override
    public void Fly() {
        System.out.println("飞翔");
    }
}
Lesson12_AniamlFather s = new Lesson12_AnimalSon();
s.Eat(); // 父亲吃东西 儿子吃东西 在C#只会打印父类的 但是Java自动处理了

抽象类和抽象方法

// Java中的抽象类和抽象方法使用和C#中基本一致
// 关键字:abstract
// 抽象类不能被实例化
// 抽象方法在抽象类中声明,必须被实现

接口

// Java中接口中方法默认(只能)为public
// Java中接口可以声明字段,但是默认(只能)是static和final的,也就是静态常量
// Java中继承接口的关键字是implements,一般写在继承类之后
// 继承多个接口用逗号分隔
// Java中不存在显示实现接口,重写不同接口的同名方式时,"两个接口共享"
public interface Lesson12_IBird
{
    void Fly();
}

public interface Lesson12_IFly
{
    // 默认并且只能是 静态常量
    int speed = 10;
    void Fly();
}
System.out.println(Lesson12_IFly.speed); // 10
Lesson12_IFly s2 = new Lesson12_AnimalSon();
s2.Fly(); // 飞翔
Lesson12_IBird s3 = (Lesson12_IBird) s2;
s3.Fly(); // 飞翔

总结

Java中多态相关知识点,和C#中基本一致,相对C#更简单:

  1. 没有vo关键字,有类似base的super
  2. 继承接口用implements
  3. 接口中可以声明变量,但是是静态常量
  4. 不存在显示实现接口(多个接口存在同名方法,实现一次即可)

12.2 知识点代码

Lesson12_AnimalAbstract

public abstract class Lesson12_AnimalAbstract
{
    public int age;

    public abstract void Eat();
}

Lesson12_AnimalFather

public class Lesson12_AnimalFather extends Lesson12_AnimalAbstract
{
    @Override
    public void Eat()
    {
        System.out.println("父亲吃东西");
    }
}

Lesson12_AnimalSon

public class Lesson12_AnimalSon extends Lesson12_AnimalFather implements Lesson12_IFly, Lesson12_IBird
{
    @Override
    public void Eat() {
        super.Eat();
        System.out.println("儿子吃东西");
    }

    @Override
    public void Fly() {
        System.out.println("飞翔");
    }
}

Lesson12_IBird

public interface Lesson12_IBird
{
    void Fly();
}

Lesson12_IFly

public interface Lesson12_IFly
{
    //默认并且只能是 静态常量
    int speed = 10;
    void Fly();
}

Lesson12_面向对象_多态

public class Lesson12_面向对象_多态
{
    public static void main(String[] args)
    {
        //知识点1: Java中的vob
        //Java中没有vo关键字,也就是virtual(虚函数)和override(重写)
        //我们如果要重写基类的方法,直接在子类中实现同名方法即可
        //它会直接覆盖父类方法!!
        //Java中有类似 base 的关键字 super

        //注意:重写是Java会自动补全一个@Override
        //它类似于注释,可有可无,主要是用来帮助我们阅读代码
        Lesson12_AnimalAbstract s = new Lesson12_AnimalSon();
        s.Eat();//父亲吃东西 儿子吃东西 在C#只会打印父类的 但是Java自动处理了



        //知识点2:抽象类和抽象方法
        //Java中的抽象类和抽象方法使用和C#中基本一致
        //关键字:abstract
        //抽象类不能被实例化
        //抽象方法在抽象类中声明,必须被实现


        //知识点3:接口
        //1.Java中接口中方法默认(只能)为public
        //2.Java中接口可以声明字段,但是默认(只能)是static和final的,也就是静态常量
        //3.Java中继承接口的关键字是implements,一般写在继承类之后
        //4.继承多个接口用逗号分隔
        //5.Java中不存在显示实现接口,重写不同接口的同名方式时,"两个接口共享"
        System.out.println(Lesson12_IFly.speed);//10
        Lesson12_IFly s2 = new Lesson12_AnimalSon();
        s2.Fly();//飞翔
        Lesson12_IBird s3 = (Lesson12_IBird) s2;
        s3.Fly();//飞翔


        //总结
        //Java中多态相关知识点
        //和C#中基本一致,相对C#更简单
        //1.没有vo关键字,有类似b的super
        //2.继承接口用implements
        //3.接口中可以声明变量,但是是静态常量
        //4.不存在显示实现接口(多个接口存在同名方法,实现一次即可)
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏