标签: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 面向对象 多态
原文地址:http://hnyuanzijian.blog.51cto.com/8869344/1774086