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的作用: 第一种:用来访问父类被隐藏的成员变量 第二种:用 ...
随机推荐
- 常州day7
Task1 蛤布斯有一个序列,初始为空.它依次将 1-n 插入序列,其中 i 插到当前第 ai 个数的右边 (ai=0 表示插到序列最左边).它希望你帮 它求出最终序列. 对于 100%的数据,n&l ...
- python基础(3)
使用list和tuple list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示: ...
- 【codechef】Children Trips
Portal -->CC_Children Trips Solution (英文题解看得真爽qwq不过写的好详细啊ovo) 首先这题有一个很重要的条件就是边权是\(1\)或者\(2\),所以虽然 ...
- centos7安装python-pip(转)
好久没更新博客了............. 来一发................ 在使用centos7的软件包管理程序yum安装python-pip的时候会报一下错误: No package pyt ...
- Udp打洞原理和源代码。
所谓udp打洞就是指客户端A通过udp协议向服务器发送数据包,服务器收到后,获取数据包,并且 可获取客户端A地址和端口号.同样在客户端B发送给服务器udp数据包后,服务器同样在收到B发送过来 的数据包 ...
- Qt ------ 获取 wifi 信息
QProcess:可以调用外部进程 netsh wlan show interfaces:可以查看连接哪个wifi netsh wlan show networks:显示所有可用的wifi netsh ...
- CentOS下安装JDK1.8
0.卸载旧版本 键入命令java-version,查询当前JDK版本 如果版本号不是想要的,键入rpm -qa|grep gcj 键入命令 yum -y remove (后接查询得到的版本),移除老版 ...
- Mahout源码目录说明&&算法集
Mahout源码目录说明 mahout项目是由多个子项目组成的,各子项目分别位于源码的不同目录下,下面对mahout的组成进行介绍: 1.mahout-core:核心程序模块,位于/core目录下: ...
- CSS 字体常用属性
一.字体大小 font-size:参数 /** * 参数:一.数字固定值,如20px * 二.父元素字体的百分比 * 三.smaller 比父元素更小 * 四.larger 比父元素更大 * 五.i ...
- 10个基于 JavaScript 的 WYSIWYG 编辑器
COMSHARP CMS 写道:在线编辑内容的时候,那些基于 JavaScript 的编辑器帮了我们大忙,这些所见即所得(WYSIWYG)编辑器,给我们提供了类似 Office 的操作体验.如今,任何 ...