Java学习笔记(十)——多态
一、多态
1、对象的多种形态
(1)引用多态:
父类的引用可以指向本类的对象
父类的引用可以指向子类的对象
(2)方法多态:
创建本类对象时,调用的方法为本类方法:
创建子类对象时,调用的方法是子类方法,如果没重写,调用的就是继承父类的方法
(3)父类的引用是不可以调用子类特有的方法。
二、多态中的引用类型转换
1、向上类型转换(隐式/自动类型转换)
小类型到大类型的转换
2、向下类型转换(强制类型转换)
大类型到小类型的转换
3、instanceof运算符,来解决引用对象的类型,避免类型转换的安全性问题。
4、一个demo

5、使用instanceof运算符,来解决引用对象的类型,避免类型转换的安全性问题的一个demo

三、抽象类
1、语法定义
在类前面使用abstract修饰的类就是抽象类
2、应用场景:
(1)在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法。
(2)从多个具有相同特征的子类中抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免了子类设计的随意性。
3、作用:
限制规定子类必须实现的某些方法,但不关注实现细节。
4、使用规则:
(1)使用abstract定义抽象类
(2)abstract定义抽象方法,只有声明,不需要实现
(3)包含抽象方法的类是抽象类
(4)抽象类中可以包含普通的方法,也可以没有抽象方法。
(5)抽象类不能直接创建,可以定义引用变量
5、一个demo
(1)建立一个手机抽象类

package com.cnblogs; public abstract class Telphone
{
public abstract void call();
public abstract void sendMessage();
}
(2)创建一个老式手机CellPhone类


package com.cnblogs;
public class CellPhone extends Telphone {
@Override
public void call() {
// TODO Auto-generated method stub
System.out.println("通过键盘打电话");
}
@Override
public void sendMessage() {
// TODO Auto-generated method stub
System.out.println("通过键盘发短信");
}
}
(3)同(2),建立只能手机类SmartPhone
package com.cnblogs;
public class SmartPhone extends Telphone {
@Override
public void call() {
// TODO Auto-generated method stub
System.out.println("使用语音打电话");
}
@Override
public void sendMessage() {
// TODO Auto-generated method stub
System.out.println("使用语音发短信");
}
}
(4)建立入口类Init

package com.cnblogs;
public class Init {
public static void main(String[] args) {
// TODO Auto-generated method stub
Telphone tel1 = new CellPhone();
tel1.call();
tel1.sendMessage();
Telphone tel2 = new SmartPhone();
tel2.call();
tel2.sendMessage();
}
}
(5)运行结果:

四、Java中的接口
1、接口定义
类是一种具体实现提,而接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类方法的具体实现,它只规定这些类里必须提供的某些方法。
2、定义方法:
使用interface关键字:
[修饰符] interface 接口名[extends 父接口1,父接口2……]
{
0个~多个常量定义
0个~多个抽象方法定义
}
3、接口定义:
接口中的方法只能是抽象方法,总是使用,即使定义时不添加public abstract修饰符,系统也是默认加上的。
4、使用接口:
一个类可以实现一个或多个接口,实现接口使用implements关键字,Java中一个类只能继承一个父类,但是可以继承多个接口。

格式固定,不能改变extends和Implements顺序的调换。
5、一个demo

(1)定义一个接口:


package com.cnblogs;
public interface IPlayGame {
public void playGame();
}
(2)SmartPhone引用接口
package com.cnblogs; public class SmartPhone extends Telphone implements IPlayGame
{ @Override
public void call() {
// TODO Auto-generated method stub
System.out.println("使用语音打电话"); } @Override
public void sendMessage() {
// TODO Auto-generated method stub System.out.println("使用语音发短信");
} public void playGame()
{
System.out.println("手机可以玩游戏");
} }
(3)新建PSP类,引用接口


package com.cnblogs;
public class Psp implements IPlayGame {
@Override
public void playGame() {
// TODO Auto-generated method stub
System.out.println("PSP可以玩游戏");
}
}
(4)使用方法:
IPlayGame ip1 = new SmartPhone();
IPlayGame ip2 = new Psp(); ip1.playGame();
ip2.playGame();
6、使用接口
(1)接口在使用过程中,还经常与匿名内部类配合使用
(2)匿名内部类定义:
没有名字的内部类,多用于关注实现而不关注实现类的名称
(3)语法格式:
Interface i = new Interface();
{
public void method()
{
System.out.println("匿名内部类实现接口的方式");
}
}
(4)一个demo
IPlayGame ip3 = new IPlayGame(){
@Override
public void playGame() {
// TODO Auto-generated method stub
System.out.println("使用匿名内部类的方式实现接口");
}
};
ip3.playGame();
new IPlayGame(){
@Override
public void playGame() {
// TODO Auto-generated method stub
System.out.println("使用匿名内部类的方式实现接口2");
}
}.playGame();

五、UML简介
1、UML概念

Java学习笔记(十)——多态的更多相关文章
- Java学习笔记十八:Java面向对象的三大特性之封装
Java面向对象的三大特性之封装 一:面向对象的三大特性: 封装 继承 多态 二:封装的概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访 ...
- Java学习笔记十五:Java中的成员变量和局部变量
Java中的成员变量和局部变量 一:成员变量: 成员变量在类中定义,用来描述对象将要有什么 成员变量可以被本类的方法使用,也可以被其他类的方法使用,成员变量的作用域在整个类内部都是可见的 二:局部变量 ...
- 1.12(java学习笔记)多态及向上、向下转型
一.多态 多态是指同一个方法被调用,由于对象不同导致行为不同. 例如调用自由活动方法,张三喜欢玩耍,那么他就会去玩耍. 李四喜欢学习,那么他可能去学习.调用方法因对象的不同 而产生了不同的行为. 形成 ...
- java学习笔记(4)多态
一.多态 --------------------------------------------- 1.定义:某一类事物的多种存在形态 例如:动物中猫,狗. 猫这个对象对应的类型是猫类型 猫 x ...
- Thinking in java学习笔记之多态
多态是一种将改变的事物和未变的事物分离开来的重要技术.
- Java学习笔记之多态
1.父类型的引用可以指向子类型的对象: Parent p = new Child(); 2.当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误:如果有,再去调用子类的该同名方法 ...
- Java学习笔记之——多态、抽象
1. 多态 多态:同一种事物调用同一个方法有不同的表现行为.(同一类型操作,作用于某一类对象,可以有不同的解释,产生不同的执行结果) 应用场景;当你定义一个功能性的方法可以使用多态的概念 前提:子类继 ...
- java学习笔记_多态
多态:父类的变量可以引用子类的对象 引用: Student s1 = stu; s1.setScore(200); 1.一个对象可以有多个引用,可以有多个变量操作同一个对象 2.当一个对象没有任何 ...
- Java学习笔记十九:Java中的访问控制修饰符
Java中的访问控制修饰符 一:Java修饰符的种类: 访问修饰符 非访问修饰符 修饰符用来定义类.方法或者变量,通常放在语句的最前端.我们通过下面的例子来说明: public class Hello ...
- Java学习笔记十六:Java中的构造方法
Java中的构造方法 1.使用new+构造方法 创建一个新的对象: 2.构造方法是定义在Java类中的一个用来初始化对象的方法: 3.构造方法与类同名且没有返回值: 4.语法格式: public 构造 ...
随机推荐
- java web 学习 --第十一天(Java三级考试)
第十天的学习内容:http://www.cnblogs.com/tobecrazy/p/3473954.html Servlet理论知识: 1.servlet 生成class位置 tomcat编译后生 ...
- ffmpeg-20160617-git-bin.7z ffmpeg-20160626-git-bin.7z
ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 S 下一帧 [ -2秒 ] +2秒 ; -1秒 ' +1秒 下一个帧 -> -5秒 f ...
- ffmpeg-20160525-git-bin
ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 S 下一帧 [ -2秒 ] +2秒 ; -1秒 ' +1秒 下一个帧 -> -5秒 f ...
- spring mvc 重定向问题
(1)我在后台一个controller跳转到另一个controller,为什么有这种需求呢,是这样的.我有一个列表页面,然后我会进行新增操作,新增在后台完成之后我要跳转到列表页面,不需要传递参数,列表 ...
- 【leetcode】Word Search (middle)
今天开始,回溯法强化阶段. Given a 2D board and a word, find if the word exists in the grid. The word can be cons ...
- 【python】入门学习(五)
字符串: 正索引,从0开始 和 负索引,从-1开始 >>> s = 'apple' >>> s[0] 'a' >>> s[1] 'p' >& ...
- 【Git】标签管理
来源:廖雪峰 为什么要标签: 发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本.将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来. ...
- mysql无法启动
当在安装mysql服务时,有时会遇到恶心的PID错误而导致安装后无法启动以下为针对mysql-5.5版本在安装mysql时所遇到的问题的解决方法. 1.可能是/usr/local/mysql/data ...
- php数据访问(批量删除)
批量删除: 首先给每一行加上复选框,也就是在自增长列内加入checkbox.因为这里可以多选,也可以单选,所以在传值的时候需要传一个数组来进行处理,所以复选框name的值设定一个数组.传值都是传的va ...
- objective-c数组
1 #pragma mark -----------数组的初始化方式-------------- 2 // insert code here... 3 // NSLo ...