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的作用: 第一种:用来访问父类被隐藏的成员变量 第二种:用 ...
随机推荐
- 获取和验证Windows AD域的用户信息
1.获取windows AD域用户信息,首先需要有一个ad域管理员权限的账号,用这个账号连接ad域,获取所有域用户信息 用LdapContext,它继承自DirContext public Objec ...
- 聊聊flink的AsyncWaitOperator
序本文主要研究一下flink的AsyncWaitOperator AsyncWaitOperatorflink-streaming-java_2.11-1.7.0-sources.jar!/org/a ...
- python之快速排序
快速排序(Quicksort)是对冒泡排序的一种改进. 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另 ...
- 洛谷 P4585 [FJOI2015]火星商店问题 解题报告
P4585 [FJOI2015]火星商店问题 题目描述 火星上的一条商业街里按照商店的编号\(1,2,\dots,n\) ,依次排列着\(n\)个商店.商店里出售的琳琅满目的商品中,每种商品都用一个非 ...
- smb(ms17-010)远程命令执行之msf
本次用到的环境: kali(2016.2)32位系统.ip地址:192.168.1.104 目标靶机为:win7sp1x64系统(关闭防火墙),ip地址:192.168.1.105 具体的步骤如下: ...
- MapReduce(五) mapreduce的shuffle机制 与 Yarn
一.shuffle机制 1.概述 (1)MapReduce 中, map 阶段处理的数据如何传递给 reduce 阶段,是 MapReduce 框架中最关键的一个流程,这个流程就叫 Shuffle:( ...
- [学习笔记]FHQ-Treap及其可持久化
感觉范浩强真的巨 博主只刷了模板所以就讲基础 fhq-treap 又形象的称为非旋转treap 顾名思义 保留了treap的随机数堆的特点,并以此作为复杂度正确的条件 并且所有的实现不用旋转! 思路自 ...
- go日期时间函数+常用内建函数+错误处理
日期时间函数 // 时间日期函数包 import "time" // 1. 当前时间 time.Now()-->time.Time类型 // 2. now:=time.Now ...
- ASP.NET Core的身份认证框架IdentityServer4--(5)自定义用户登录(通过接口登录,无UI版本)
官网接口详解文档地址:文档地址 (PS:可通过接口名称搜索相应接口信息.) 源码地址:https://github.com/YANGKANG01/IdentityServer4-IdentityAut ...
- winform MDI子窗口闪动问题(本人测试100%有效解决闪屏问题)
将下面的代码随便放到主窗体的任何一个地方 protected override CreateParams CreateParams //解决MDI闪屏 { get { CreateParams cp ...