Java面向对象之多态
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java面向对象之多态相关的知识,希望对你有一定的参考价值。
多态(Polymorphism):
我们说子类就是父类,因此多态的意思就是:父类型的引用可以指向子类的对象
public class PolyTest { public static void main(String[] args) { // TODO 自动生成的方法存根 Flower rose = new Rose();//多态, 子类就是父类,父类型的引用可以指向子类的实例,或者对象 rose.sing(); } } class Flower { public void sing(){ System.out.println("flower is sing"); } } class Rose extends Flower{ }
方法重写可以决定多态,方法重载不能决定多态
2.父类型的引用可以指向子类型的引用,当父类调用子类的方法时候,必须保证子类型中有当前是用的方法
Parent p = new Child();当使用多态的方法时,首先检查父类中是否有sing()方法,如果没有则变异错误,如果有,再去调用子类的sing()方法
下面错误类型
public class PolyTest { public static void main(String[] args) { // Parent parent = new Parent(); // parent.sing(); // Child child = new Child(); // child.sing(); Parent p = new Child(); p.sing(); } } class Parent{ /*public void sing(){ System.out.println("parent is running"); }*/ } class Child extends Parent{ public void sing(){ System.out.println("child is running"); } }
3.向下的类型的转换
public class PolyTest2 { public static void main(String[] args) { // TODO 自动生成的方法存根 Animal a = new Dog(); Dog dog = (Dog)a; dog.sing(); } } class Animal{ public void sing(){ System.out.println("animal is sing"); } } class Dog extends Animal { public void sing(){ System.out.println("dog is sing"); } }
多态是运行期的行为,而不是编译是的行为
3.一共有两种类型的强制类型转换:
1.向上类型转换(upcast):比如说将Cat类型转换成Animal类型,即将子类型转换为父类型。向上的类型转换不需要显式制定
2.向下类型转换(downcast):比如将animal类型转换为Cat类型。即将父类型转换为子类型。对于向下类型转换,必须要显式指定(必须要使用强制类型)
package com.yuanzijian01; public class PolyTest2 { public static void main(String[] args) { // TODO 自动生成的方法存根 /* Animal a = new Dog(); Dog dog = (Dog)a; dog.sing(); Animal b = new Cat(); Cat c = (Cat)b; c.sing(); */ /* Animal animal1= new Cat(); Animal animal2= new Animal(); animal2 = animal1; animal2.sing(); */ /* Animal animal1= new Cat(); Animal animal2= new Animal(); animal1 = animal2; animal1.sing(); */ /* Cat cat = new Cat(); Animal animal = cat; animal.sing(); */ /* Animal animal = new Animal(); Cat cat = (Cat)animal; 错误的指向,指向谁,才能够转化谁 */ //向上的类型转换 Cat cat = new Cat(); Animal animal = (Animal)cat; animal.sing(); //向下类型转换 Animal a = new Cat(); Cat c = (Cat)a; c.sing(); } } class Animal{ public void sing(){ System.out.println("animal is sing"); } } class Dog extends Animal { public void sing(){ System.out.println("dog is sing"); } } class Cat extends Animal{ public void sing(){ System.out.println("cat is sing"); } }
以上是关于Java面向对象之多态的主要内容,如果未能解决你的问题,请参考以下文章