java基础11 继承(super、extends关键字和重写,这三个要素出现的前提:必须存在继承关系)
面向对象的三大特征:
1.封装 (将一类属性封装起来,并提供set()和get()方法给其他对象设置和获取值。或者是将一个运算方法封装起来,其他对象需要此种做运算时,给此对象调用)
2.继承 (继承关系通过extends关键字体现)
3.多态 (父类的引用指向子类的对象,或者接口的引用类型变量指向接口实现类的对象)
一、继承
1.1、继承的格式
class 类名1 extends 类名2{
}
1.2、继承关系
继承关系通过关键字extends体现的
1.3、继承关系的注意事项
1.父类私有的成员(成员变量或成员方法)不能被继承.(如果要获取成员变量的值,可以通过非私有成员方法获取)
2.父类的构造函数是不能够被继承
3.创建子类的对象时默认会先调用父类无参构造器.
4.千万不要为了减少重复代码而去继承,只有真正存在继承关系时,才去继承
1.4、附录
1、父类有有参构造器,子类无有参构造器,会报错?
答:子类实例化有参的对象时,默认调用父类的无参构造器,父类中存在无参构造器,不会报错,假如父类中没有无参构造器,
只有有参构造器,那么需要在子类构造器中添加super关键字,super关键字括号里面填相应的参数,调用父类有参构造器 2、为什么要调用父类的构造器?这样子做的意义何在?
答:调用父类的构造器是可以初始化父类继承下去的属性的.
注意:子类中如果有无参构造器,父类中一定也要有
/*
需求:有工人,农民,教师,科学家,服务生,其中,工人,农民,服务生只有基本工资.
教师除基本工资外,还有课酬(元/天),科学家除基本工资外,还有年终奖,
请你写出相关类,将各种类型的员工的全年工资打印出来;
*/
class People{
private double BaseSal; //基本工资
double Bonus; //奖金
public People(){ }
public People(double BaseSal){
this.BaseSal=BaseSal;
}
public double getBaseSal(){ //基本薪资
return BaseSal*12;
}
public double getBonus(double sal){ //额外薪资
return Bonus;
}
public double getYearSal(double sal){ //年薪
return getBonus(sal)+getBaseSal();
}
} class Worker extends People{ //工人
public Worker(double BaseSal){
super(BaseSal);
}
public double getBonus(double sal){//额外薪资
return Bonus;
}
} class Waiter extends People { //服务员
public Waiter(double BaseSal){
super(BaseSal);
}
public double getBonus(double sal){ //额外薪资
return Bonus;
}
} class Scientist extends People { //科学家
public Scientist(double BaseSal){
super(BaseSal);
}
public double getBonus(double sal){ //额外薪资
return getBaseSal()*(8/10);
} } class Teacher extends People { //教师
public Teacher(double BaseSal){
super(BaseSal);
}
public double getBonus(double sal){
return 12*30*sal;
}
}
class Farmer extends People { //农民
public Farmer(double BaseSal){
super(BaseSal);
}
public double getBonus(double sal){ //额外薪资
return sal;
}
} class Demo1{
public static void main(String[] args) {
Farmer f=new Farmer(1200);//
Teacher t=new Teacher(2000);
System.out.println("农民年薪"+f.getYearSal(0));//
System.out.println("老师的薪资"+t.getYearSal(500));
Waiter w=new Waiter(4000);
System.out.println("服务员薪资:"+w.getYearSal(100000)); }
}
二、super关键字
2.1、概念
super关键字代表了父类空间的引用
2.2、super关键字的作用
1.子父类中存在这同名的成员时,在子类中默认访问子类的成员,可以通过super关键字访问父类指定父类成员
2.创建子类对象时,默认调用父类的无参构造器,可以通过super关键字调用父类中有参构造器
2.3、super关键字调用父类的构造方法时,要注意的事项
1.在子类的构造器中没有指定调用父类的构造方法,那么编译器会在子类构造器中默认添加一个super()
2.super关键字调用父类构造函数时,该语句必须要是子类函数的第一语句
3.super关键字与this关键字不能同时出现在一个构造函数中调用其他构造函数.因为两个语句都需要是第一个语句(第一行)
2.4、super关键字与this关键字的区别
1.代表的事物不一致
1.super关键字代表的是父类空间的引用.
2.this关键字代表是所属函数的调用对象.
2.使用的前提不一样
1.super关键字必须要有继承关系才能使用
2.this关键字不需要存在继承关系也可以使用
3.调用构造函数的区别
1.super关键字是调用父类的构造函数
2.this关键字是调用本类的构造函数.
三、重写
3.1、方法重写的前提
必须存在继承关系
3.2、方法重写的概念
子父类出现同名的函数,这个我们就叫方法的重写
3.3、什么时候需要使用重写方法
父类的功能无法满足子类的需求.
3.4、方法的重写需要注意的事项
1.方法重写时,方法名和形参列表必须一致.
2.方法重写时,子类的访问权限修饰符要大于或等于父类的访问权限修饰符
3.方法重写时,子类的返回值类型必须要小于或者等于父类的返回值类型(引用数据类型),但是在基本数据类型中,子类和父类返回值类型要一致
4.方法重写时,子类抛出异常类型要小于或者等于父类的异常类型.
|
原创作者:DSHORE 作者主页:http://www.cnblogs.com/dshore123/ 原文出自:http://www.cnblogs.com/dshore123/p/8805436.html 欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!) |
java基础11 继承(super、extends关键字和重写,这三个要素出现的前提:必须存在继承关系)的更多相关文章
- java基础(11) -JDBC
java基础(11) -JDBC jdbc 1.装载驱动 载入跟数据库建立连接的驱动 /* sql server: String className ="com.microsoft.sqls ...
- java基础学习总结——super关键字
一.super关键字
- Java基础笔记(2) 程序入口 关键字 标识符 常量 变量
提醒:关于那些和我一样新鸟来看资料的,能看懂多少看多少,看不懂的就是不重要,重要的你想我自己学习肯定要标注的,这些信息明白每个知识点实际作用就好了,其他的比如等会讲的常量内存,常量池这些都是我找的资料 ...
- java基础14 多态(及关键字:instanceof)
面向对象的三大特征: 1.封装 (将一类属性封装起来,并提供set()和get()方法给其他对象设置和获取值.或者是将一个运算方法封装起来,其他对象需要此种做运算时,给此对象调用) 2.继承 ...
- java基础(11):接口、多态
1. 接口 1.1 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成. ...
- Java基础-this和super的区别
package com.cn.This; /** * this与super的区别: * 1.this相当于指向本类的对象的指针,调用本类的另一种类型的构造方法 * 2.super调用的是父类中形参相同 ...
- Java基础之final和abstract关键字
final final在Java中是一个保留的关键字,可以声明成员变量.方法.类以及本地变量.一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如果你试图将变量再次初始化的话,编 ...
- Java基础の乱弹琴一:assert关键字
一.概述 assert:表示断言 二.语法 在Java中,assert关键字是从JAVA SE 1.4 引入的,为了避免和老版本的Java代码中使用了assert关键字导致错误,Java在执行的时候默 ...
- java基础篇 之 super关键字的理解
之前一直认为,super指向的是父类对象.到今天,仔细查询了资料,自己做了实验,确认这个结论是不对的.我们分一下几个点讨论下: super的作用: 第一种:用来访问父类被隐藏的成员变量 第二种:用 ...
随机推荐
- redis的简单事务
Redis对事务的支持目前还比较简单.Redis只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令.当一个client在一个连接中发出multi命令时,这个 ...
- ms17-010漏洞扫描工具
说明: 1.先利用masscan进行445端口探测 2.利用巡风的脚本对开放445端口的IP进行ms17-010漏洞扫描. 3.使用方法:Python2运行后,按提示输入单个IP或者IP网段. # c ...
- OpenCV C++如何使RGB图像变为灰度图像
http://m.blog.csdn.net/blog/u014395105/41308979 最近在研究如何用C++来处理图像,而不使用封装好的OpenCV代码,这样能够更好的了解OpenCV的内部 ...
- poj1204 Word Puzzles
Word Puzzles Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 12090 Accepted: 4547 S ...
- 抓包 ------ Wireshark 的使用
Wireshark的数据包详情窗口,如果是用中括号[]括起来的,表示注释,在数据包中不占字节 发了一个包,很久没有收到应答后,会重发包,在Wireshark抓包工具提示“[TCP Retransmis ...
- 使用jvisualvm工具来监控java运行情况
jvisualvm是jdk自带的工具.所以要先安装jdk 1.jvisualvm工具的路径: 通过which jvisualvm来查看 /usr/local/jdk1.7.0_79/bin/jvi ...
- 即时通信系统Openfire分析之一:Openfire与XMPP协议
引言 目前互联网产品使用的即时通信协议有这几种:即时信息和空间协议(IMPP).空间和即时信息协议(PRIM).针对即时通讯和空间平衡扩充的进程开始协议SIP(SIMPLE)以及XMPP.PRIM与 ...
- jq的图片放大镜效果
<div class="imgbox"> <div class="probox"> <img src="" a ...
- Order By 问题集合
问题(一):Order By 多个参数排序 在做多字段的排序的时候我们经常会会用到该语句. 所以多参数排序是从左到右的局部排序,修改的范围只有前面参数(几个参数)相同的情况下在排序. select * ...
- NOIP模拟赛11
T1 [HAOI2016]放棋子 https://daniu.luogu.org/problem/show?pid=3182 障碍交换行不影响 所以第i列有障碍的行换到第i行 然后错排公式 本校自测要 ...