JavaWeb js快速排序 Angular firebase plugins timer ros 打印 GMU nginx视频教程 jq遍历元素 hbase集群搭建 mser算法 查看mysql是否启动 linux获取当前时间 linux启动数据库 mysql临时表 python随机数 python中的index python基础教程 python中set的用法 python中的join函数 java编译 java怎么使用 java获取本机ip java调用接口 javaenum java读文件 EasyCHM 图解深度学习 qq钱包实名认证 苹果手机总是自动重启 保留小数点后两位 spss20安装教程 js字符转数字 pr加速视频 sendto函数 office2010免费版 优酷app播放器下载 一键清除锁屏密码 拍照姿势的摆法女
当前位置: 首页 > 学习教程  > 编程语言

(三)面向对象 - 多态

2021/1/28 23:37:20 文章标签:

一、多态介绍 一、多态简介 1、介绍 接口的多种不同的实现方式即为多态。 由于子类与父类之间存在"is - a"关系,这种规则的另外一种表述是替换原则(substitution principle)。因此父类对象出现的任何对象的地方都可以使用子类对象替换,简单来…

一、多态介绍

 

一、多态简介

 
1、介绍

接口的多种不同的实现方式即为多态。

由于子类与父类之间存在"is - a"关系,这种规则的另外一种表述是替换原则(substitution principle)。因此父类对象出现的任何对象的地方都可以使用子类对象替换,简单来说即,父类型的变量可以引用子类型的对象。

public class Animal{
    ...
}

public class People{
    
}

public class Polymorphic{
    public static void main(String[] args){
        Animal animal = new People(); //父类型的变量可以引用子类型的对象
    }
    
}
    

 
声明类型: 一个变量必须被声明为某种类型,这个变量的类型被称为声明类型。比如上述的Animal
 
实际类型: 是指被变量引用的对象所对应的实例类。比如上述的People

注:实例可以使用声明类型或者是它的子类的构造方法。例如类People是Animal的子类。

 
 

2、特点

一个引用类型变量声明为父类的类型,而实际引用的是子类的对象,则这个变量不能访问子类中添加的属性和方法。

public class Polymorphic {

    public static void main(String[] args) {
        Animal animal = new People();

        animal.PeoplePrint();//编译时直接报找不到符号
    }
}

class Animal{

    public void AnimalPrint(){
        System.out.println("AnimalPrint");
    }

    public void print(){
        System.out.println("animal");
    }
}

class People extends Animal{

    public void PeoplePrint(){
        System.out.println("PeoplePrint");
    }

    @Override
    public void print() {
        System.out.println("people");
    }
}

 
 

二、静态绑定与动态绑定

 
1、静态绑定

即方法在编译期就能够确定。例如:private、static、final方法或者构造方法(不会发生重写)。

 
 
2、动态绑定

即在运行时的那一刻才知道具体要调用哪个方法。例如:如果要调用的方法依赖于实际类型。

public class Polymorphic {

    public static void main(String[] args) {
        Animal animal = new People(); 
        animal.print();//实际类型为People
    }
}

class Animal{

    public void AnimalPrint(){
        System.out.println("AnimalPrint");
    }

    public void print(){
        System.out.println("animal");
    }
}

class People extends Animal{

    public void PeoplePrint(){
        System.out.println("PeoplePrint");
    }

    @Override
    public void print() {
        System.out.println("people");
    }
}

 
 

二、对象转换

 

一、instanceof

 
1、作用

用于检查左边的变量能否转换为右边类的对象。

通常用于在对象的类型强转之前用作判断。

 
2、格式

对象变量名 instanceof 类名

 

3、示例

Animal animal = new People();

if(people instanceof People){
    System.out.pringln("可以转换");
}

 
 

二、对象转换

 
1、介绍
 
对于基本数据而言:

​ 自动类型转换

​ 强制类型转换
 
对于Java对象而言:

​ 向上转型:子类可以转换为父类类型

​ 向下转型:但父类类型转换子类类型需要强制转换(注意:无继承关系的引用类型之间的转换时非法的)。

 
2、示例

public class Polymorphic {

    public static void main(String[] args) {
        Animal animal = new People();

        if(animal instanceof People){
            ((People) animal).PeoplePrint(); //PeoplePrint
        }


    }
}

class Animal{

    public void AnimalPrint(){
        System.out.println("AnimalPrint");
    }

    public void print(){
        System.out.println("animal");
    }
}

class People extends Animal{

    public void PeoplePrint(){
        System.out.println("PeoplePrint");
    }

    @Override
    public void print() {
        System.out.println("people");
    }
}

本文链接: http://www.dtmao.cc/news_show_650251.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?