java基础-面向对象の多态
2016-05-04 15:46
507 查看
多态性指的是:一个事物的多种表性形态
方法的重载与重写也是一种表现
子类对象的多态性
前提:
类的继承
子类对父类方法的重写
程序运行时分为编译、运行
对于多态来说,编译时,看左边,将此引用变量理解为父类的类型
运行时,看右边,关注于真正的对象实体,子类的对象。那么执行的方法就是子类重写的
Person p1=new Man();(向上转型)
虚拟方法调用,通过父类的引用指向子类的对象实体,当调用方法时,实际执行的是子类重写父类的方法
P1.walk();
P1.walk();
Woman w =(Woman)p2;向下转型,使用强转符:()
注意:如果man转化成woman在运行的时候会报类型转化异常错,java.lang.ClassCastException
//instanceof
If (p1 instanceof Woman){
Woman w1=(Woman)p1;
W1.shopping();
}
If (p1 instanceof Man){
Man m1=(Man)p1;
m1.entertainment();
}
格式:对象a instanceof
类A:判断对象a是否是A的一个实例,是的话返回true;否则返回false
若a是A的实例,那么a也一定是A类的父类的实例
父类的引用指向子类对象package newpackage;
//多态
import java.util.concurrent.atomic.AtomicLong;
import javax.management.InstanceAlreadyExistsException;
public class TestAnimal {
public static void main(String[] args) {
TestAnimal t=new TestAnimal();
//func的参数可以是任意的animal()父类或者旗下子类
//父类对象指向子类引用
t.func(new Animal());
t.func(new Cat());
t.func(new Dog());
}
public void func(Animal a) {
a.eat();
a.jump();
//进行多态的判断
if(a instanceof Dog){
((Dog) a).wangwang();
}else if(a instanceof Cat) {
((Cat) a).catchMouse();
}
}
}
class Animal{
String name;
int age;
public void eat(){
System.out.println("animals eat");
}
public void jump(){
System.out.println("animalsjump");
}
}
class Dog extends Animal{
public void eat() {
System.out.println("Dogs eat");
}
public void jump() {
System.out.println("Dogs jump");
}
public void wangwang(){
System.out.println("Dogs wangwang");
}
}
class Cat extends Animal{
public void eat() {
System.out.println("Cats eat");
}
public void jump() {
System.out.println("Cats jump");
}
public void catchMouse(){
System.out.println("Cats catch mouses");
}
}
方法的重载与重写也是一种表现
子类对象的多态性
前提:
类的继承
子类对父类方法的重写
程序运行时分为编译、运行
对于多态来说,编译时,看左边,将此引用变量理解为父类的类型
运行时,看右边,关注于真正的对象实体,子类的对象。那么执行的方法就是子类重写的
Person p1=new Man();(向上转型)
虚拟方法调用,通过父类的引用指向子类的对象实体,当调用方法时,实际执行的是子类重写父类的方法
P1.walk();
P1.walk();
Woman w =(Woman)p2;向下转型,使用强转符:()
注意:如果man转化成woman在运行的时候会报类型转化异常错,java.lang.ClassCastException
//instanceof
If (p1 instanceof Woman){
Woman w1=(Woman)p1;
W1.shopping();
}
If (p1 instanceof Man){
Man m1=(Man)p1;
m1.entertainment();
}
格式:对象a instanceof
类A:判断对象a是否是A的一个实例,是的话返回true;否则返回false
若a是A的实例,那么a也一定是A类的父类的实例
父类的引用指向子类对象package newpackage;
//多态
import java.util.concurrent.atomic.AtomicLong;
import javax.management.InstanceAlreadyExistsException;
public class TestAnimal {
public static void main(String[] args) {
TestAnimal t=new TestAnimal();
//func的参数可以是任意的animal()父类或者旗下子类
//父类对象指向子类引用
t.func(new Animal());
t.func(new Cat());
t.func(new Dog());
}
public void func(Animal a) {
a.eat();
a.jump();
//进行多态的判断
if(a instanceof Dog){
((Dog) a).wangwang();
}else if(a instanceof Cat) {
((Cat) a).catchMouse();
}
}
}
class Animal{
String name;
int age;
public void eat(){
System.out.println("animals eat");
}
public void jump(){
System.out.println("animalsjump");
}
}
class Dog extends Animal{
public void eat() {
System.out.println("Dogs eat");
}
public void jump() {
System.out.println("Dogs jump");
}
public void wangwang(){
System.out.println("Dogs wangwang");
}
}
class Cat extends Animal{
public void eat() {
System.out.println("Cats eat");
}
public void jump() {
System.out.println("Cats jump");
}
public void catchMouse(){
System.out.println("Cats catch mouses");
}
}
相关文章推荐
- Lua编程示例(二):面向对象、metatable对表进行扩展
- C#与.net高级编程 C#的多态介绍
- C#中面向对象编程机制之多态学习笔记
- 浅谈Lua的面向对象特性
- Lua面向对象之类和继承浅析
- JavaScript面向对象的两种书写方法以及差别
- 浅谈c# 面向对象之类与对象
- C#中的多态深入理解
- C#面向对象特征的具体实现及作用详解
- C# 面向对象的基本原则
- C#中多态、重载、重写区别分析
- 设计引导--一个鸭子游戏引发的设计理念(多态,继承,抽象,接口,策略者模式)
- 浅谈对c# 面向对象的理解
- Ruby面向对象编程详解
- C# 面向对象三大特性:封装、继承、多态
- php学习 面向对象 课件第1/2页
- PHP程序61条面向对象分析设计的经验小结
- 收集学习asp.net比较完整的面向对象开发流程
- Python3 面向对象概述
- java面向对象之类和对象