多态

 package oop.demon01.demon06;
 ​
 public class Application {
     public static void main(String[] args) {
         // 一个对象的实际类型是确定的
         // new Student();
         //new Person();
 ​
         //可以指向的引用类型不确定了: 父类的引用指向子类
 ​
         //Student 能调用的方法都是自己的或者继承父类的
         //Person 父类型,可以指向子类,但是不能调用子类独有的方法(private)
         Student s1 = new Student();
         Person s2 = new Student();
         Object s3=new Person();
 ​
         //对象执行那些方法,主要看对象左边的类型(同---执行),和右边关系不大!
         //子类重写了父类的方法,执行子类方法
         s2.run();//son
         s1.run();//son
 ​
         s1.eat();
         // s2.eat(); 不行 报错--- 方法未重写
         
         //s2.shout(); 不能调用子类独有的方法(private)
    }
 }
 ----------------------------
 package oop.demon01.demon06;
 ​
 public class Person {
 ​
     public void run(){
         System.out.println("run");
    }
 ​
 }
 -----------------------------
 package oop.demon01.demon06;
 ​
 public class Student extends Person{
 ​
     @Override
     public void run() {
         System.out.println("son");
    }
 ​
     public void eat(){
         System.out.println("eat");
    }
 ​
     private void shout(){
         System.out.println("shout");
    }
 }
 ​
 /*
 多态注意事项:
 1. 多态是方法的多态,属性没有多态
 2. 父类和子类,有联系 类型转换异常,父类引用指向子类对象! ClassCastException !
 3.存在条件: 继承关系,方法需要重写,父类引用子类对象 Father s1 = new Son();
 ​
    有些方法不能重写:
      1. static 方法,属于类,它不属于实例
      2. final 常量:
      3. private方法:
  */

instanceof 和类型转换

instanceof
 package oop.demon01.demon06;
 ​
 public class Application {
     public static void main(String[] args) {
         
         //Object > String
         //Object > Person > Teacher
         //Object > Person > Student
         
         Object object=new Student();
         //System.out.println(X instanceof Y);//能不能编译通过!
         
         System.out.println(object instanceof Student);//true
         System.out.println(object instanceof Person);//true
         System.out.println(object instanceof Object);//true
         System.out.println(object instanceof Teacher);//false
         System.out.println(object instanceof String);//false
         System.out.println("------------------------------------------");
         Person person=new Student();
         System.out.println(person instanceof Student);//true
         System.out.println(person instanceof Person);//true
         System.out.println(person instanceof Object);//true
         System.out.println(person instanceof Teacher);//false
        // System.out.println(person instanceof String);// 编译报错! 没有联系
         System.out.println("------------------------------------------");
         Student student=new Student();
         System.out.println(student instanceof Student);//true
         System.out.println(student instanceof Person);//true
         System.out.println(student instanceof Object);//true
         //System.out.println(student instanceof Teacher);//没有关系
         //System.out.println(student instanceof String);//没有关系
    }
 }
子类与父类的转换
 package oop.demon01.demon06;
 ​
 public class Application {
     public static void main(String[] args) {
         //类型之间的转化: 父 子
 ​
         //高               低
         Person obj=new Student();// 低---->高
         //student.go(); 报错 Person里没有go()方法
         // 将这个对象转换为 Student类型,我们就可以使用Student类型的方法! 高---->低 :强制转换
         /*
          Student student=(Student) obj;
          student.go();
          */
        ((Student) obj).go()  
             
 -----------注意://子类转换为父类,可能丢失自己本来的一些方法!Student student=new Student();
         student.go();
         Person person=student;
         //person.go(); go()方法丢失
         
    }
 }
 --------------
     package oop.demon01.demon06;
 ​
 public class Person {
 ​
     public void run(){
         System.out.println("run");
    }
 }
 --------------
     package oop.demon01.demon06;
 ​
 public class Student extends Person{
 ​
     public void go(){
         System.out.println("go");
    }
 }
 --------------
     
总结
 /*
 1.父类引用指向子类对象
 2.把子类转换为父类,向上转型
 3.把父类转换为子类,向下转换; 强制转换
 4.方便方法的调用,减少重复代码! 简介
 ​
 抽象: 封装、继承、多态 !     抽象类、接口
  */

学习内容源自视频:b站狂神说Java

Java面向对象11——多态的更多相关文章

  1. Java面向对象之多态(来源于身边的案例)

    2019年1月3日 星期四 Java面向对象之多态(来源于身边的案例) 1. 为什么要用多态? 1.1 多态是面向对象的三大特性之一 1.2 多态是基于接口设计的模型 1.3 多态具有横向扩展特性 1 ...

  2. java面向对象之 多态 Polymorphism

    多态(Polymorphism):用我们通俗易懂的话来说就是子类就是父类(猫是动物,学生也是人),因此多态的意思就是:父类型的引用可以指向子类的对象. 1.多态的含义:一种类型,呈现出多种状态 主要讨 ...

  3. Java面向对象的多态

    Java中多态的概念是面向对象中除封装和继承外非常重要的知识点,也是Java面向对象三大特性最后一个特性 多态其实就是指对象存在的多种形态,多态分为引用多态和方法多态 引用多态的含义就是:父类的引用可 ...

  4. Java面向对象特性--多态

    Java是一种面向对象的编程语言,面向对象的三大特性就是继承,封装,多态.下面细细说一说多态. 多态的定义:一个事物的多种形态,指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而 ...

  5. JavaSE入门学习18:Java面向对象之多态

    一Java多态 多态是同一个行为具有多个不同表现形式或形态的能力. 多态性是对象多种表现形式的体现.比方我们说"宠 物"这个对象.它就有非常多不同的表达或实现,比方有小猫.小狗.蜥 ...

  6. Java 面向对象_多态

    多态图解 代码中体现多态性 父类名称 对象名 = new 子类名称(); or 接口名称 对象名 = new 实现类名称(); // 父类 public class Father { public v ...

  7. 对Java面向对象中多态的理解

    理解的要点:多态意味着父亲的变量可以指向子类对象 面向对象程序设计的三大支柱是封装.继承和多态 封装对外把相应的属性和方法实现的细节进行了隐藏.继承关系使一个子类继承父亲的特征,并且加上了一些新的特征 ...

  8. Java面向对象:多态

    多态:具有表现多种形态的能力的特征(同一个实现接口,使用不同的实例而执行不同的操作) 实现多态的优点:为了方便统一调用! 实现多态的三种方式! 1:子类到父类的转换: 例: 1 Dog dog=new ...

  9. Java面向对象之多态

    多态:具有表现多种形态的能力的特征(同一个实现接口,使用不同的实例而执行不同的操作) 实现多态的优点:为了方便统一调用! 实现多态的三种方式! 1:子类到父类的转换: 例: Dog dog=new D ...

随机推荐

  1. 简聊DFA(确定性有限状态自动机)

    状态机理论最初的发展在数字电路设计领域.而在软件设计领域,状态机设计的理论俨然已经自成一体. 状态机是软件编程中的一个重要概念,比这个概念更重要的是对它的灵活应用.在一个思路清晰而且高效的程序中,必然 ...

  2. Linux中su和sudo的用法

    su -#su - oldboy //当执行这个命令的时候表示切换到oldboy用户,并且重新读取用户环境相关配置文件,具体的来说就是执行下用户家目录下.bash_profile和.bashrc文件, ...

  3. 日常BUG-01 之 @Sl4j

    问题描述: 需要打印日志,使用的是lombok包中的sl4j,lombok依赖如下: <dependency> <groupId>org.projectlombok</g ...

  4. Mysql 主键的操作

    ​ 主键:primary key ,主要的键.一张表只能有一个字段可以使用对应的键,用来唯一的约束字段里面的数据,数据不能重复,这种键称之为主键,一张表只能最多有一个主键.  一.增加主键 方法一:在 ...

  5. centos 8 下解压.tar.gz文件

    执行命令 tar 参数 文件名 参数: -c :建立一个压缩文件的参数指令(create 的意思): -x :解开一个压缩文件的参数指令: -t :查看 tarfile 里面的文件: 特别注意,在参数 ...

  6. 从三道题目入门frida

    偶然从看雪看到了一篇入门frida的题目,正好苦于没练手的东西,直接上手一波 1.第一题jadx打开,也没有壳和混淆,整体非常清晰,判断的逻辑也很简单 发现其实就是两个输入框,一个用户名一个密码,先拼 ...

  7. GYM101471D「ICPC2017 WF」Money for Nothing

    「ICPC2017 WF」Money for Nothing 传送门 我们可将生产商和消费商都看成二维平面上的点,其坐标分别为 \((d_i,p_i)\),\((e_i,q_i)\). 那么问题转变为 ...

  8. Automation Framework Design 自动化框架设计思想

    从2007年到2017年,十年内自动化测试工具层出不穷,各种工具在运用一段时间之后,各个公司都会有测试架构师对于目前的自动化测试工具进行框架定制设计. 从惠普2007年GDCC推出的的WebDrivi ...

  9. File类与常用IO流第十一章——打印流

    第十一章.打印流 概述:java.io.PrintStream extends OutputStream,为其他输出流添加了功能,使题目能够方便的打印各种数据值表示形式. 特点: 只负责数据的输出,不 ...

  10. React 之 组件生命周期

    React 之 组件生命周期 理解1) 组件对象从创建到死亡它会经历特定的生命周期阶段2) React组件对象包含一系列的勾子函数(生命周期回调函数), 在生命周期特定时刻回调3) 我们在定义组件时, ...