Java面向对象11——多态
多态
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——多态的更多相关文章
- Java面向对象之多态(来源于身边的案例)
2019年1月3日 星期四 Java面向对象之多态(来源于身边的案例) 1. 为什么要用多态? 1.1 多态是面向对象的三大特性之一 1.2 多态是基于接口设计的模型 1.3 多态具有横向扩展特性 1 ...
- java面向对象之 多态 Polymorphism
多态(Polymorphism):用我们通俗易懂的话来说就是子类就是父类(猫是动物,学生也是人),因此多态的意思就是:父类型的引用可以指向子类的对象. 1.多态的含义:一种类型,呈现出多种状态 主要讨 ...
- Java面向对象的多态
Java中多态的概念是面向对象中除封装和继承外非常重要的知识点,也是Java面向对象三大特性最后一个特性 多态其实就是指对象存在的多种形态,多态分为引用多态和方法多态 引用多态的含义就是:父类的引用可 ...
- Java面向对象特性--多态
Java是一种面向对象的编程语言,面向对象的三大特性就是继承,封装,多态.下面细细说一说多态. 多态的定义:一个事物的多种形态,指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而 ...
- JavaSE入门学习18:Java面向对象之多态
一Java多态 多态是同一个行为具有多个不同表现形式或形态的能力. 多态性是对象多种表现形式的体现.比方我们说"宠 物"这个对象.它就有非常多不同的表达或实现,比方有小猫.小狗.蜥 ...
- Java 面向对象_多态
多态图解 代码中体现多态性 父类名称 对象名 = new 子类名称(); or 接口名称 对象名 = new 实现类名称(); // 父类 public class Father { public v ...
- 对Java面向对象中多态的理解
理解的要点:多态意味着父亲的变量可以指向子类对象 面向对象程序设计的三大支柱是封装.继承和多态 封装对外把相应的属性和方法实现的细节进行了隐藏.继承关系使一个子类继承父亲的特征,并且加上了一些新的特征 ...
- Java面向对象:多态
多态:具有表现多种形态的能力的特征(同一个实现接口,使用不同的实例而执行不同的操作) 实现多态的优点:为了方便统一调用! 实现多态的三种方式! 1:子类到父类的转换: 例: 1 Dog dog=new ...
- Java面向对象之多态
多态:具有表现多种形态的能力的特征(同一个实现接口,使用不同的实例而执行不同的操作) 实现多态的优点:为了方便统一调用! 实现多态的三种方式! 1:子类到父类的转换: 例: Dog dog=new D ...
随机推荐
- Local dimming algorithm in matlab
LED局部背光算法的matlab仿真 最近公司接了华星光电(TCL)的一个项目LCD-BackLight-Local-Diming-Algorithm-IP ,由于没有实际的硬件,只能根据客户给的论文 ...
- mysql_my.cnf文件详解
以下是 my.cnf 配置文件参数解释:#*** client options 相关选项 ***##以下选项会被MySQL客户端应用读取.注意只有MySQL附带的客户端应用程序保证可以读取这段内容.如 ...
- 关于 Index '8' specified is out of bounds.
报类似这样的错误暂时我只发现了两个原因: 1, 数组超出了界线,这个自己多多注意,加判断,在循环的时候看看是不是有结束条件 2, 你需要提交的网页不存在.有可能是因为你没有这个文件.可能是你的文件名错 ...
- varnish配置语言(2)
目录 1. Backend servers 2. 多个后端 3. Varnish 中的后端服务器和虚拟主机 4. 调度器 5. 健康检查 6. Hashing 7. 优雅模式 Grace mode 和 ...
- CF277E Binary Tree on Plane
CF277E Binary Tree on Plane 题目大意 给定平面上的 \(n\) 个点,定义两个点之间的距离为两点欧几里得距离,求最小二叉生成树. 题解 妙啊. 难点在于二叉的限制. 注意到 ...
- PYTHON找色不变移动
import cv2 import aircv as ac import numpy as np def wmhd(sjh): bzz0=0 bzz1=0 bzz2=0 xxa=0 yya=0 xxb ...
- Red Hat系统下安装gcc
这篇是在客户服务器上安装redis碰到的问题.服务器是RedHat,无法直接安装gcc,导致Redis无法安装的解决办法: 1.make redis时候报下面这样的错,原因就是gcc没有安装. ...
- 入门 - SpringBoot 2.x 使用 JWT
JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,本文介绍它的原理和用法 一.跨域认证遇到的问题 由于多终端的出现,很多的站点通过 web api restful 的形式对外 ...
- Motion Planning 是什么
前言与引用 这一个呢,主要是自己突然看一篇论文的时候不知道 为什么他提出的方法对于规划来说就是好的,规划又应该分为哪几个部分,解决的是哪几个部分的问题?带着这个问题,我就去搜:Motion Plann ...
- vue(22)Vuex的安装与使用
前言 每一个 Vuex 应用的核心就是 store(仓库).store基本上就是一个容器,它包含着你的应用中大部分的状态 (state).Vuex 和单纯的全局对象有以下两点不同: Vuex 的状态存 ...