JAVA语法三:继承和多态
目录
1.继承
1.1:父类成员访问
2.this应用和super关键字
2.1:this引用
2.2:super关键字
2.3:this和super的区别
2.4:final关键字
3.多态
3.1:多态实现条件
3.2:重写和重载
3.2.1:重载
3.2.2:重写
3.2.3:重写和重载的区别
3.3.向上转移
3.4.向下转型
3.5:多态的优缺点
1.继承
继承中的关键字是extends.
注意事项:
1.子类会将父类中的成员变量或者成员方法继承到子类中。
2.子类继承父类之后,必须要添加自己特有的成员,体现与父类的不同。
3.私有成员可以继承但不能访问。
4.java中只能继承一个类。
1.1:父类成员访问
子类与父类中的成员 注意:
1.如果访问成员变量子类中有,优先访问自己的成员变量。
2.如果访问的成员变量与父类中成员变量同名,则优先访问自己的。
成员变量访问遵循就近原则,自己有优先自己的,如果木有则向父类中找。
2.this应用和super关键字
2.1:this引用
1.this.普通成员变量
2.this.普通成员方法
3.this():调用结构体方法
注意:this引用的是调用成员方法的对象,不能调用静态的成员变量和方法。
注意:
1.this只能在成员方法中使用。
2.this只能引用当前对象,不能再引用其他对象。
构造方法:
1.名字必须与类名相同。
2.没有返回值类型,设置为void也不行。
3.当我们没有提供构造方法的时候,编译器会帮我们提供一个不带参数的方法。
4.实例化才会调用构造方法。
2.2:super关键字
1.super.data:访问父类的普通成员变量。
2.super.fun():调用父类的普通成员方法。
3.this():调用父类的构造方法。
注意:只能再非静态方法中使用
必须是构造方法中的第一语句,不能和this同用。
2.3:this和super的区别
1.this是当前对象的引用,当前对象是调用实例方法的对象。super是子类对象中从父类继承下来部分成员的引用。
2.在非静态成员方法中,this用来访问本类的方法和属性,super用来访问父类继承下来的方法和属性。
3.在构造方法中,this()用来调用本类构造方法,super()调用父类的构造方法。
2.4:final关键字
final关键字可以用来修饰变量,成员方法以及类。
public static void main(String[] args) {final int a=10;a=20;//这里报错了,//final修饰变量或字段,表示常量,只能初始化一次,且初始化后不能被修改 }
final修饰类:表示此类不能被继承-----密封类
3.多态
多态的意义:去完成莫个行为,当不同的对象去完成会产生不同的状态
3.1:多态实现条件
1.必须在继承的调价下
2.子类必须对父类中的方法进行重写。
3.通过父类的引用调用重写的方法。
多态中实现条件有重写,那我们来讲一讲重写和重载。
3.2:重写和重载
3.2.1:重载
class A {public int c;public int d;public int fun(int a, int b) {//1return a + b;}public double fun(double a, double c) {//2return a * c;}
}class B {public int a;public int b;public int fun(int a, int b, int c) {//3return a + b + c;}
}public class Test1 {public static void main(String[] args) {A a = new A();int c1 = a.fun(2, 3);System.out.println(c1+" ");int c2 = a.fun(2, 3);System.out.println(c2+" ");B b = new B();int c3 = b.fun(2, 3, 4);System.out.println(c3);}
在这里1,2,3构成了重载。
注意:
1.方法名必须相同。
2.参数列表必须不同(参数的个数不同,参数的类型不同,类型的次序必须不同)。
3.与返回值类型是否相同无关。
3.2.2:重写
重写:是子类对父类非静态,非private修饰,非构造方法等的实现,进行重写。
方法重写的规则:
1.方法名相同。
2.参数列表相同。
3.返回值相同。(被重写的方法类型可以不同,但是必须是父子关系。)
4.访问权限不能比父类中被重写的方法的访问权限低。
重写和重载的区别,有时候会在面试中遇到。所以我们需要注意这些
3.2.3:重写和重载的区别
区别点 | 重写 | 重载 |
参数列表 | 不可修改 | 必须修改 |
返回类型 | 不可修改(除了父子类关系) | 可以修改 |
访问限定符 | 一定不能做更严格的限制 | 可以修改 |
3.3.向上转移
向上转移:实际就是创建一个子类对象,将其当成父类对象来使用。
class animal{String name;int age;public animal(String name, int age) {this.name = name;this.age = age;}public void eat(){System.out.println(name+"正在吃东西");}}class Dog extends animal{public Dog(String name, int age) {super(name, age);}public void eat(){System.out.println(name+"吃狗粮");}public void bark(){System.out.println(name+"汪汪叫");}} public class Test2 {public static void main(String[] args) {animal animal1=new Dog("hihi",10);animal1.eat();//这里就是//animal1.bark()//这里报错}}
这就是向上转型,只能调用父类的成员属性和方法。
多态的用例:
这里就是多态,dog 和cat都调用eatFood函数,但出现的结果是不一样的。
3.4.向下转型
向下转型:将父类再还原为子类对象即可,即为向下转型。
这里会出现类型转换异常。
instanceof:如果该表达式为true,则可以安全转换。
3.5:多态的优缺点
好处:
1.可以降低代码的圈复杂度(条件语句和循环语句出现的个数)
2.可扩展能力更强。
坏处:
1.代码运行效率低。
2.属性和构造方法没有多态性。
总结:如果有啥不对或者没有说明清楚的,希望大家可以多多指教。
JAVA语法三:继承和多态相关推荐
- Java中的继承 与 多态(中)
先导: 我们在<Java中的继承 与 多态(上)>当中讲解了如下几个问题, 1.继承是什么 2.super关键字 3.特殊考点-父子类中不同代码块的实现顺序 所以现在我们对于继承 ...
- Java实验3继承、多态
继承.多态(接口和包) 实验目的 (1) 掌握Java语言中继承和多态的相关概念 (2) 掌握Java程序设计中继承和多态机制的使用 (3) 掌握Java语言中接口和包的概念及使用 实验内容及要求 仿 ...
- Java回顾 封装 继承和多态
封装 什么是封装 封装:就是隐藏对象的属性和实现细节,仅对外提供公共访问方式. 封装时的权限控制符区别如下: 封装的意义 对于封装而言,一个对象它所封装的是自己的属性和方法,所以它是不需要依赖其他对象 ...
- Java基础:继承、多态、抽象、接口
第一讲 继承 一.继承概述 1.多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可. 2.通过extends关键字可以实现类与类的 ...
- Java基础篇--继承(inherit),多态(Polymorphism)
Java基础篇--继承(inherit),多态(Polymorphism) 1. 继承概述 1.1 什么是继承 1.2 为什么要使用继承 1.3 继承的特点 1.4 继承的优点 2. 组合设计模式 2 ...
- 【java笔记】继承与多态
多态性的前提:extends继承或者implements实现 继承与多态: 定义:同一个操作被不同类型对象调用时可能产生不同 的行为 解释:如果一个类有很多子类,并且这些子类都重写了父类中的某个方法, ...
- Java实战之继承与多态
类的继承以及抽象类的定义和使用 任务描述 我们都知道,生活中的继承无处不在,在数学王国的领域也是如此.最近数学王国中一位名叫Shape的父亲有一个烦心事,他有两个儿子Circle和Rectangle, ...
- java封装继承多态的理解_深入理解Java封装、继承、多态
一:封装 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问,常见的实现方式就是:getter.setter. 封装遵循了"开闭原则&qu ...
- 初始Java Java SE 包,继承,组合,多态,抽象类,接口
目录 包 1.静态导入 2.将类放到包中 3.包的访问权限控制 继承 基本语法: 注意事项: protected 关键字 final 关键字 组合 多态 向上转型: 动态绑定 方法重写 重写的规则 : ...
最新文章
- 关于微信的jsapi_ticket的获取方法;
- pycharm中的requirements.txt文件—如何生成及导入
- mysql修改数据库字符集,编码
- 闲得蛋疼在linux下装鸟个svn
- 小车自动往返工作原理_自动门厂家为你讲解各类自动门工作原理
- mac中的放置java类库扩展的位置
- html调用app store,iOS 获取appStore的链接地址,从app中跳转 appStore中应用
- Spring框架----AOP的概念及术语
- Effective Java(二)—— 循环与 StringBuilder
- python调用c语言函数_从Python调用C函数
- G-Sensor 校准标准
- SpringMVC系列(四)使用 POJO 对象绑定请求参数值
- 读《林锐-我的大学十年》
- Execl单元格图片锁定----一定能
- 很好的东子(干货很多)--把一个函数变成全局的方法及slideToggle()
- 服务搭建篇(一) 搭建基于prometheus + node_exporter + grafana + Alertmanager 的监控报警系统 , 保姆级教程
- 算法导论——钢条切割问题(C语言)
- MJKDZ PS2手柄控制OskarBot小车(一):Arduino串口发送数据
- 数据库编程入门培训(一)
- 狂人日记day12 day13
热门文章
- PythonNET网络编程2
- matlab里exist是什么意思,通达信exist函数用法,exist()函数在matlab中怎么用?求教大神~...
- 一个漂亮的k8s资源可视化工具--kubeview
- 微信7.0升级后 高德地图在微信内置浏览器定位失败
- 《开源硬件创客——15个酷应用玩转树莓派》——1.2 树莓派基本介绍
- Css3飞机动画特效
- 电子相册制作软件哪个好?快速制作婚礼请柬、旅游相册等,超简单
- 计算机专业第二课堂活动计划,第二课堂活动计划
- LeetCode !! 69 plusOne
- windows C++多线程(七):信号量Semaphore的使用