zoukankan      html  css  js  c++  java
  • 面向对象的多态性

    Java面向对象-对象的多态性

    Java中的多态性表现:

    1,方法的重载和重写(覆盖);

    2,可以用父类的引用指向子类的具体实现,而且可以随时更换为其他子类的具体实现;

    我们先搞个父类Animal:

    复制代码
    复制代码
    1 package com.java1234.chap03.sec13;
    2
    3 public class Animal {
    4
    5 public void say(){
    6 System.out.println("我是一个动物");
    7 }
    8 }
    复制代码
    复制代码
    再搞两个子类,分别是Dog和Cat类,重写父类方法say:

    复制代码
    复制代码
    1 package com.java1234.chap03.sec13;
    2
    3 public class Cat extends Animal{
    4
    5 public void say(){
    6 System.out.println("我是一个猫");
    7 }
    8 }
    复制代码
    复制代码
    复制代码
    复制代码
    1 package com.java1234.chap03.sec13;
    2
    3 public class Dog extends Animal{
    4
    5 public void say(){
    6 System.out.println("我是一个狗");
    7 }
    8 }
    复制代码
    复制代码

    然后我们写个Test测试类:

    复制代码
    复制代码
    1 package com.java1234.chap03.sec13;
    2
    3 public class Test {
    4
    5 public static void main(String[] args) {
    6 Dog dog=new Dog();
    7 dog.say();
    8
    9 Cat cat=new Cat();
    10 cat.say();
    11 }
    12 }
    复制代码
    复制代码
    运行输出:

    我是一个狗

    我是一个猫

    这个大家肯定能看明白 简单的子类继承 以及实例化对象 调用方法 ;

    下面我来用多态测试,父类引用指向子类具体实现:

    复制代码
    复制代码
    1 package com.java1234.chap03.sec13;
    2
    3 public class Test {
    4
    5 public static void main(String[] args) {
    6 // 父类引用指向Dog子类的具体实现
    7 Animal animal=new Dog();
    8 animal.say();
    9
    10 // 更换实现
    11 animal=new Cat();
    12 animal.say();
    13 }
    14 }
    复制代码
    复制代码

    运行输出:

    我是一个狗

    我是一个猫

    对象的转型:

    向上转型:子类对象->父类对象 安全

    向下转型:父类对象->子类对象 不安全

    比如上面的实例:Animal animal=new Dog(); 就是后面的new Dog() 子类对象 向上 Animail animal 转型 是安全的;

    向下转型 是父类对象强制转换成子类对象:我们来改下Test类:

    复制代码
    复制代码
    1 package com.java1234.chap03.sec13;
    2
    3 public class Test {
    4
    5 public static void main(String[] args) {
    6 // 父类引用指向Dog子类的具体实现
    7 Animal animal=new Dog();
    8 animal.say();
    9
    10 // 向下转型
    11 Dog dog=(Dog) animal;
    12 dog.say();
    13
    14 // 向下转型 因为animal指向的是Dog具体实现 所以会报错
    15 Cat cat=(Cat)animal;
    16 cat.say();
    17 }
    18 }
    复制代码
    复制代码
    运行报错:

    我是一个狗

    我是一个狗

    Exception in thread "main" java.lang.ClassCastException: com.java1234.chap03.sec13.Dog cannot be cast to com.java1234.chap03.sec13.Cat

    at com.java1234.chap03.sec13.Test.main(Test.java:15)

    转换异常 所以说向下转型是不安全的,我们必须知道具体的实现类;

    我们上面用的继承方式演示了多态 其实在实际开发中 更多的是用接口:

    我们再写一个实例:

    我们先建一个父类接口People:

    1 package com.java1234.chap03.sec13;
    2
    3 public interface People {
    4
    5 public void say();
    6 }
    接下来写两个具体实现类,Student Teacher:

    复制代码
    复制代码
    1 package com.java1234.chap03.sec13;
    2
    3 public class Student implements People{
    4
    5 @Override
    6 public void say() {
    7 System.out.println("我是学生");
    8 }
    9
    10 }
    复制代码
    复制代码
    复制代码
    复制代码
    1 package com.java1234.chap03.sec13;
    2
    3 public class Teacher implements People{
    4
    5 @Override
    6 public void say() {
    7 System.out.println("我是老师");
    8 }
    9
    10 }
    复制代码
    复制代码

    我们来写一个测试类:

    复制代码
    复制代码
    1 package com.java1234.chap03.sec13;
    2
    3 public class Test2 {
    4
    5 public static void main(String[] args) {
    6 People p1=new Student();
    7 p1.say();
    8
    9 p1=new Teacher();
    10 p1.say();
    11 }
    12 }

  • 相关阅读:
    【Windows核心编程】重载类成员函数new / new[] / delete / delete[]
    【数据结构和算法】 O(1)时间取得栈中的最大 / 最小元素值
    路由器与交换机做链路聚合
    怎么样判断两个IP地址是否在同一个网段
    sqlite常用的命令-增删改查
    5G时代的智慧灯杆需要哪种网关?
    什么是边缘计算网关?
    5G/4G工业智能网关在工业物联网的必要性
    基于5G/4G网关的冷冻设备远程监测及故障预警系统
    工业5G网关配置POE技术的优势
  • 原文地址:https://www.cnblogs.com/w2758472746/p/13977352.html
Copyright © 2011-2022 走看看