美文网首页
Java面向对象-多态性

Java面向对象-多态性

作者: 筱笑 | 来源:发表于2017-07-18 17:14 被阅读20次

一、多态性

  • 多态性的体现:
 - 方法的重载和重写
 - 对象的多态性
  • 对象的多态性:
  • 向上转型:程序会自动完成
    父类 父类对象 = 子类实例
  • 向下转型:强制类型转换
    子类 子类对象 = (子类)父类实例
代码一  : 向上转型

class A2{
    public void tell1() {
        System.out.println("A2---tell1");
    }
    public void tell2() {
        System.out.println("A2---tell2");

    }
}
class B2 extends A2{
    public void tell1() {
        System.out.println("B2---tell1");
    }
    public void tell3() {
        System.out.println("B2--tell3");
    }
}
public class Demo22 {
    public static void main(String[] args) {
        //向上转型
        B2 b = new B2();
        A2 a=b;
        a.tell1();//tell1是重写的,调用的是重写之后的方法
        a.tell2();
    }
}

结果:
B2---tell1
A2---tell2

代码二 : 向下转型

class A2{
    public void tell1() {
        System.out.println("A2---tell1");
    }
    public void tell2() {
        System.out.println("A2---tell2");

    }
}
class B2 extends A2{
    public void tell1() {
        System.out.println("B2---tell1");
    }
    public void tell3() {
        System.out.println("B2--tell3");
    }
}
public class Demo22 {
    public static void main(String[] args) {
        //向下转型
        A2 a2 = new B2();
        B2 b2 = (B2)a2;
        b2.tell1();
        b2.tell2();
        b2.tell3();
    }
}

结果:
B2---tell1
A2---tell2
B2--tell3

代码三  : 类型转换失败

class A2{
    public void tell1() {
        System.out.println("A2---tell1");
    }
    public void tell2() {
        System.out.println("A2---tell2");

    }
}
class B2 extends A2{
    public void tell1() {
        System.out.println("B2---tell1");
    }
    public void tell3() {
        System.out.println("B2--tell3");
    }
}
public class Demo22 {
    public static void main(String[] args) {
        //向下转型
        A2 a2 = new A2(); //将B2改成A2,报错 - 类型转换失败
        B2 b2 = (B2)a2;
        b2.tell1();
        b2.tell2();
        b2.tell3();
    }
}

结果:
Exception in thread "main" java.lang.ClassCastException: cn.sec.ch02.A2 cannot be cast to cn.sec.ch02.B2
    at cn.sec.ch02.Demo22.main(Demo22.java:35)

二、多态性应用

代码

class A3{
    public void tell1(){
        System.out.println("A3---tell1");
    }
}
class B3 extends A3{
    public void tell2(){
        System.out.println("B3--tell2");
    }
}
class C3 extends A3{
    public void tell3() {
        System.out.println("C3--tell3");
    }
}
class D3 extends A3{
    
}
public class Demo23 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        say(new B3());
        say(new C3());
        say(new D3());
    }
    /**
     * 此方法无论传B3还是C3都要调用到tell1的执行
     */
    public static void say(A3 a) {
        a.tell1();
    }

}
结果:
A3---tell1
A3---tell1
A3---tell1

三、instanceof关键字

在Java中可以使用instanceof关键字判断一个对象到底是不是一个类的实例。

代码
class A4{
    public void tell1() {
        System.out.println("A4---tell1");
    }
    public void tell2() {
        System.out.println("A4---tell2");

    }
}
class B4 extends A4{
    public void tell1() {
        System.out.println("B4---tell1");
    }
    public void tell3() {
        System.out.println("B4--tell3");
    }
}
public class Demo24 {
    public static void main(String[] args) {
        A4 a4  = new A4();
        System.out.println(a4 instanceof A4);
        System.out.println(a4 instanceof B4);
        
        A4 a = new B4(); //向上转型
        System.out.println(a instanceof A4);
        System.out.println(a instanceof B4);
    }
}

结果:
true
false
true
true

相关文章

  • java 面试题(1)

    1:java 面向对象 面向对象的特征有哪些方面? 抽象,继承,封装:多态性。 抽象:抽象是将一类对象的共同特征总...

  • Java面向对象-多态性

    一、多态性 多态性的体现: 对象的多态性: 向上转型:程序会自动完成父类 父类对象 = 子类实例 向下转型:强...

  • Java面向对象的四大特征

    前言 Java做为一门“全面”面向对象的编程语言,提供了面向对象的四种基本性质:抽象性、封装性、继承性和多态性。面...

  • JAVA面向对象学习(多态性)

    多态性的理解和应用 1.1. 多态性的理解 多态性:在Java中,多态性是它的一大特性,可以理解成为是事物的多种形...

  • 多态

    面向对象特征之三:多态性 1、理解多态性:一个事物的多种形态 2、什么是多态性?对象的多态性:父类的引用指向子类的...

  • 《Java从小白到大牛》之第12章 继承与多态

    《Java从小白到大牛》纸质版已经上架了!!! 类的继承性是面向对象语言的基本特性,多态性前提是继承性。Java支...

  • 面向对象之------多态

    多态性,是面向对象中最重要的概念,在java中有两种体现:1.方法的重载(overload)和重写(overwri...

  • 软件测试读书笔记(佟伟光著)8

    面向对象软件测试 面向对象软件的特点及其对测试的影响 面向对象程序三大特征:封装性、继承性、多态性。封装是指将对象...

  • Java面向对象的四个特征

    Java面向对象的四个特征:抽象、继承、封装、多态性 (1)抽象:忽略主题全部不打算把全部事件描述下来,只是抽取主...

  • 面向对象-多态性

    /* 面向对象的特征三:多态性 1.多态性指的是什么?多态性,可以理解为一个事物的多种表型形态。 1)方法的重载与...

网友评论

      本文标题:Java面向对象-多态性

      本文链接:https://www.haomeiwen.com/subject/jrkhkxtx.html