面向对象的三大特征:

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关键字和重写,这三个要素出现的前提:必须存在继承关系)的更多相关文章

  1. java基础(11) -JDBC

    java基础(11) -JDBC jdbc 1.装载驱动 载入跟数据库建立连接的驱动 /* sql server: String className ="com.microsoft.sqls ...

  2. java基础学习总结——super关键字

    一.super关键字

  3. Java基础笔记(2) 程序入口 关键字 标识符 常量 变量

    提醒:关于那些和我一样新鸟来看资料的,能看懂多少看多少,看不懂的就是不重要,重要的你想我自己学习肯定要标注的,这些信息明白每个知识点实际作用就好了,其他的比如等会讲的常量内存,常量池这些都是我找的资料 ...

  4. java基础14 多态(及关键字:instanceof)

    面向对象的三大特征: 1.封装   (将一类属性封装起来,并提供set()和get()方法给其他对象设置和获取值.或者是将一个运算方法封装起来,其他对象需要此种做运算时,给此对象调用) 2.继承   ...

  5. java基础(11):接口、多态

    1. 接口 1.1 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成. ...

  6. Java基础-this和super的区别

    package com.cn.This; /** * this与super的区别: * 1.this相当于指向本类的对象的指针,调用本类的另一种类型的构造方法 * 2.super调用的是父类中形参相同 ...

  7. Java基础之final和abstract关键字

    final final在Java中是一个保留的关键字,可以声明成员变量.方法.类以及本地变量.一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如果你试图将变量再次初始化的话,编 ...

  8. Java基础の乱弹琴一:assert关键字

    一.概述 assert:表示断言 二.语法 在Java中,assert关键字是从JAVA SE 1.4 引入的,为了避免和老版本的Java代码中使用了assert关键字导致错误,Java在执行的时候默 ...

  9. java基础篇 之 super关键字的理解

    ​ 之前一直认为,super指向的是父类对象.到今天,仔细查询了资料,自己做了实验,确认这个结论是不对的.我们分一下几个点讨论下: super的作用: 第一种:用来访问父类被隐藏的成员变量 第二种:用 ...

随机推荐

  1. 安装redis环境

    1 安装redis至 /home/www/redis目录下 [root@cuijian www]# tar zxf redis-2.8.13.tar.gz [root@cuijian www]# cd ...

  2. 驱动之DMA的介绍与应用20170210

    本文主要介绍的是DMA相关的知识,首先: 1)在实现DMA传输时,是由DMA控制器直接掌管总线,因此,存在着一个总线控制权转移问题.即DMA传输前,CPU要把 总线控制权交给DMA控制器,而在结束DM ...

  3. Spring MVC同时接收一个对象与List集合对象

    原:https://blog.csdn.net/u011781521/article/details/77586688/ Spring MVC同时接收一个对象与List集合对象 2017年08月25日 ...

  4. 虚拟机安装ubuntu14.04.5系统

    参考教程 在vitualbox安装 ubuntu14.04.2 LTS教程 http://jingyan.baidu.com/article/46650658228345f549e5f8cc.html ...

  5. 跟我一起写Makefile(三)

    书写规则———— 规则包含两个部分,一个是依赖关系,一个是生成目标的方法. 在Makefile中,规则的顺序是很重要的,因为,Makefile中只应该有一个最终目标,其它的目标都是被这个目标所连带出来 ...

  6. Flying to the Mars

    D - Flying to the Mars Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I ...

  7. CSS3的新属性

    1.圆角矩形 .border_radius_test{ border-radius:25px; -moz-border-radius:25px; } 数值越大越圆 2.容器阴影 .box_shadow ...

  8. 那些让 Web 开发者们深感意外的事情

    作为 Web 开发者,对自己的行业前景,人人都有自己的看法,然而,任何行业都有出人意料的地方.著名的 Web 开发设计博客 Nope.com 曾向他们的读者做了一个调查,请他们列举 Web 开发领域那 ...

  9. R0—New packages for reading data into R — fast

    小伙伴儿们有福啦,2015年4月10日,Hadley Wickham大牛(开发了著名的ggplots包和plyr包等)和RStudio小组又出新作啦,新作品readr包和readxl包分别用于R读取t ...

  10. 【BZOJ】4033: [HAOI2015]树上染色 树上背包

    [题目]#2124. 「HAOI2015」树上染色 [题意]给定n个点的带边权树,要求将k个点染成黑色,使得 [ 黑点的两两距离和+白点的两两距离和 ] 最大.n<=2000. [算法]树上背包 ...