java继承的前提条件_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、为什么要调用父类的构造器?这样子做的意义何在?答:调用父类的构造器是可以初始化父类继承下去的属性的.
注意:子类中如果有无参构造器,父类中一定也要有
1 /*
2 需求:有工人,农民,教师,科学家,服务生,其中,工人,农民,服务生只有基本工资.3 教师除基本工资外,还有课酬(元/天),科学家除基本工资外,还有年终奖,4 请你写出相关类,将各种类型的员工的全年工资打印出来;
5 */
6 classPeople{7 private double BaseSal;
//基本工资
8 double Bonus;
//奖金
9 publicPeople(){10
11 }12 public People(doubleBaseSal){13 this.BaseSal=BaseSal;
14 }15 public double getBaseSal(){ //基本薪资
16 return BaseSal*12;
17 }18 public double getBonus(double sal){ //额外薪资
19 returnBonus;
20 }21 public double getYearSal(double sal){ //年薪
22 return getBonus(sal)+getBaseSal();
23 }24 }25
26 class Worker extends People{ //工人
27 public Worker(doubleBaseSal){28 super(BaseSal);
29 }30 public double getBonus(double sal){//额外薪资
31 returnBonus;
32 }33 }34
35 class Waiter extends People { //服务员
36 public Waiter(doubleBaseSal){37 super(BaseSal);
38 }39 public double getBonus(double sal){ //额外薪资
40 returnBonus;
41 }42 }43
44 class Scientist extends People { //科学家
45 public Scientist(doubleBaseSal){46 super(BaseSal);
47 }48 public double getBonus(double sal){ //额外薪资
49 return getBaseSal()*(8/10);
50 }51
52 }53
54 class Teacher extends People { //教师
55 public Teacher(doubleBaseSal){56 super(BaseSal);
57 }58 public double getBonus(doublesal){59 return 12*30*sal;
60 }61 }62 class Farmer extends People { //农民
63 public Farmer(doubleBaseSal){64 super(BaseSal);
65 }66 public double getBonus(double sal){ //额外薪资
67 returnsal;
68 }69 }70
71 classDemo1{72 public static voidmain(String[] args) {73 Farmer f=new Farmer(1200);
//74 Teacher t=new Teacher(2000);
75 System.out.println("农民年薪"+f.getYearSal(0));
//76 System.out.println("老师的薪资"+t.getYearSal(500));
77 Waiter w=new Waiter(4000);
78 System.out.println("服务员薪资:"+w.getYearSal(100000));
79
80 }81 }
二、super关键字
2.1、概念
super关键字代表了父类空间的引用
【java继承的前提条件_java基础11 继承(super、extends关键字和重写,这三个要素出现的前提(必须存在继承关系)...)】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.方法重写时,子类抛出异常类型要小于或者等于父类的异常类型.
推荐阅读
- 从零学Java|从零学Java(5)之关键字和保留字,明世隐给AD定规矩!
- Java学习|java继承 this关键字的三种用法(对比super记忆)
- Java语言高级|Java>继承>>this关键字的三种用法及super与this分析使用
- java构造方法中this_Java中this关键字在构造方法中的使用
- JAVA|JAVA中this关键字详解——>(3种用法)
- 【Java】|【零基础学Java】—this关键字的三种用法+Java继承的三个特点(二十一)
- Java|Java this关键字详解(3种用法)
- Java中this关键字和super关键字用法
- java学习|Java初学—super、this的用法以及Java继承的三个特点
- 10个 解放双手的 IDEA 插件,这些代码都不用写(第二弹)