面向对象——多态、抽象类、接口
多态
概念:父类类型引用指向子类对象(多态的第一种形式)
多态的前提是继承
语法:
父类类名 对象名 = new 子类类名();
1.多态的类型转换:
1.1自上类型转换
子类型转成父类型(dog–>pet)
作用:
增强类的选择范围,降低类的能力(只能访问父类中定义的内容)
1.2自下类型转换
语法:(子类型)父类型对象;(类似于强转)
作用:
降低类的选择范围,增强类的功能。(从pet转回dog,可以访问dog中的私有成员变量,前提是pet原本是由dog上转上来的)
2.instanceof关键字
含义:判断左边的对象是否是右边的类型。
语法:
if(pet instanceof dog){Dog dog = (Dog)pet;
}else{......
}
//instanceof属于boolean类型,如果是返回true,否则返回false。
3.访问特点
3.1 (属性)成员变量访问特点
不同名:
多态中访问不同名属性,编译看表达式的左边
同名:
多态中访问不同名属性,编译时看表达式的左边。
多态中访问同名属性,运行时看表达式左边。
3.2 成员方法访问特点
不同名:
多态中访问不同名方法,编译时看表达式左边
同名:
多态中同名方法,运行时看表达式右边(重写后的)
多态中同名静态方法,运行时看表达式左边(静态方法不能继承,所以这两个是完全无关的方法)
练习
程序员:属性(姓名、工号、工资),方法(敲代码)。
项目经理:属性(姓名、工号、工资、奖金),方法(项目控制)。
老板:属性(姓名、工号),方法(号令多个员工同时工作)。
class Employee{//雇员private String name;private String id;private double wage;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getId() {return id;}public void setId(String id) {this.id = id;}public double getWage() {return wage;}public void setWage(double wage) {this.wage = wage;}public void mothed(){//工作}
}
class Program extends Employee {//程序员@Overridepublic void mothed(){System.out.println("敲代码");}
}
class Manager extends Employee {private int bonus;public int getBonus() {return bonus;}public void setBonus(int bonus) {this.bonus = bonus;}@Overridepublic void mothed(){System.out.println("项目控制");}
}
class Boss{private String name;private String id;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getId() {return id;}public void setId(String id) {this.id = id;}public void order(Employee... empls){//动态参数技术for (int i = 0; i < empls.length; i++) {empls[i].mothed();}}
}
public class Demo {public static void main(String[] args) {Program pro = new Program();Manager ma = new Manager();Boss boss = new Boss();boss.order(pro,ma);}
}
抽象类
1.抽象类
使用时机:
1.该类中存在抽象方法
2.该类的对象只是一种概念,在现实生活中不存在该类的对象
语法:
abstract class 类名{...}
注意点:
- 抽象类中不一定具有抽象方法,抽象类中还可以有其他成员
- 有抽象方法的一定是抽象类
- 抽象类无法实例化
- 抽象类的目的是被子类继承
- 抽象类具有构造方法(子类继承父类在调用构造方法时会先调用父类的构造方法,而抽象类就是需要被继承的,所以抽象类具有构造方法)
- abstract不能与private一起使用,因为abstract修饰方法被子类重写,private修饰的方法只能本类使用,出现矛盾。
- abstract不能与final一起使用,因为abstract修饰类能被子类继承,final修饰的类不被子类继承。abstract修饰方法能被子类重写,final修饰的方法不被子类重写。所以出现矛盾。
2.抽象方法
使用时机:例如宠物类的eat()方法,该方法无法准确描述该类对象的具体行为(吃什么无法得知)
语法:
abstract 返回值类型 方法名(参数列表);
注意点:
- 抽象方法没有方法体
- 抽象方法目的就是被子类重写
- 父类有抽象方法,子类必须重写父类全部的抽象方法,除非子类自己也是一个抽象类
- 有抽象方法的一定是抽象类
接口
语法:
interface 接口名{接口成员(静态常量,抽象方法)
}
注意:
- 接口中静态常量中的final和static可以不写
- 接口中抽象方法中的abstract可以不写
- 接口中所有成员的public修饰符都可以省略。但真实开发中不会省略,原因是方便被重写
类与接口之间的关系
1.接口可以被类实现
语法:
访问修饰符 class 类名 [extends 父类] implements 接口名1,接口名2,......{成员
}
在implements后可以实现多个接口,每个接口以","隔开,简称多实现。(为了打破类的单继承)
2.接口可以被接口继承
语法:
访问修饰符 interdace 接口名 extends 父接口1,父接口2,......{成员
}
成员:接口特有的静态常量及特有抽象方法
作用:
扩展类的功能
多态的第二种形式:接口类型引用指向实现类对象
3.接口与抽象类区别
- 定义不同:接口使用interface修饰,抽象类使用abstract class修饰
- 成员不同:接口只能有静态常量和抽象方法,抽象类可以有抽象方法也可以有普通成员
- 构造方法不同:接口没有构造方法,抽象类有构造方法。
- 使用方式不同:接口多继承和多现实,抽象类单继承
- 继承关系上不同:接口被接口继承,抽象类被类继承。
面向对象——多态、抽象类、接口相关推荐
- javaSE各阶段练习题--面向对象-多态-抽象类-接口
1 (多态)定义榨汁机JuiceMachine 有榨汁方法makeJuice,传入相应的水果.如果传入的是Apple 输出 "流出苹果汁"传入的是Orange 输出 "流 ...
- 继承 多态 抽象类 接口
面向对象编程 包 继承 组合 多态 抽象类 接口 包 包(package)是组织类的一种方式. 使用包的主要目的是保证类的唯一性. java中已经提供给我们很多现成的类供我们选择,例如可以使用 imp ...
- day09 多态抽象类接口
多态抽象类接口 1:final关键字可以干什么?有什么特点? 2:final关键字的面试题? 3:多态是什么,前提是什么? 4:多态中成员访问的特点? 5:多态的好处及弊端?如何解决多态的弊端? 6: ...
- JavaSE 多态 抽象类 接口
day09目录: 多态(动态绑定机制)多态的概述多态的成员访问特点多态的好处和弊端向上转型和向下转型多态内存图 抽象类抽象类的概述抽象类的成员特点抽象类的案例 接口接口的概述接口的成员特点类与类,类与 ...
- 初始Java Java SE 包,继承,组合,多态,抽象类,接口
目录 包 1.静态导入 2.将类放到包中 3.包的访问权限控制 继承 基本语法: 注意事项: protected 关键字 final 关键字 组合 多态 向上转型: 动态绑定 方法重写 重写的规则 : ...
- Java编程基础10——面向对象_多态抽象类接口
1.多态的概述及其成员访问特点代码体现 A:多态(polymorphic)概述 事物存在的多种形态 B:多态前提- 1.要有继承关系 2.要有方法重写 3.要有父类引用指向子类对象. C:多态中的成员 ...
- java自学 part2 数组 类和对象 包 继承 多态 抽象类 接口
数组:arr 获取数组的长度:arr.length 数组转字符串: Arrays.toString(arr) 数组的拷贝: Arrays.copyOf(arr,arr.length) 数组的排序:Ar ...
- java 多态 接口_从零开始的Java日常: 多态,抽象类,接口
欢迎关注微博:@小白程序员的日常 欢迎关注微博超话:#小白程序员的日常# 本人目前在自学java,会不间断更新java知识 同为小白或者有大佬可以一起探讨一下 一.多态 1.什么是多态 同一个对象,在 ...
- java ee2019 11 5关于多态 抽象类 接口
1 猫狗案例 多态版(继承版) class Animal{//成员方法private String name ; private int age ;//无参构造public Animal(){}//有 ...
- object+多态+抽象类+接口
一.object 定义:object是java所有类的父类,Java中所有类都直接或间接的继承object,Java是单继承机制·,·一个类如果没有显示继承其他类时,就默认他继承object类 常用方 ...
最新文章
- 基于简化点云地图的语义边缘对齐的单目定位方法
- Build path contains duplicate entry
- Play 2.0框架和XA交易
- CSS之flex需要知道的一切(二)
- linux下,查找命令的使用
- java项目qq聊天室_简单的qq聊天室项目(作者涂俊伟)
- scala练习题1 基础知识
- 关于阿里云图标的使用 iconfont
- 《哔哩哔哩助手》助你快速成为B站老司机
- SQL 事务(Tran | Transation)与 Try...Catch 的使用
- mysql 留存率_用mysql统计留存率
- Sql Server数据库的备份和恢复措施
- python爬虫爬取百度文档
- 声韵启蒙(1)-(清)车万育
- Spring Boot + Spring Security + JWT + 微信小程序登录
- 第3课 把文件存入Git文档库
- AWE2021:加速拥抱数字化 开启智慧生活新纪元
- 2022年外地高新技术企业迁入迁移湖北武汉奖励补贴、条件及流程梳理
- 模糊测试工具defensics
- 洛谷P1796 汤姆斯的天堂梦【DP-数字三角形模型】【橙】