一:基本概念同C++一致

二:继承演示

.将共同点提取出来,即形成了父类/基类/超类
  –Parent class/Base class/Super class
.而其他类则自动成为子类/派生类
  –Child class/Derived cla

(一)父类Human

public class Human {
public void say() {
System.out.println("Hello World");
} public void eat() {
System.out.println("eat food");
}
}

(二)子类Women

public class Women extends Human{
public void weave() {
System.out.println("women is weaving");
}
}

(三)子类Men

public class Men extends Human{
public void plough() {
System.out.println("Men is ploughing");
}
}

(四)继承演示

public class HumanTest {
public static void main(String args[]) {
Women w=new Women();
w.eat();  //方法继承于父类
w.say();  //方法继承于父类

w.weave(); Men m=new Men();
m.eat();  //方法继承于父类
m.say();  //方法继承于父类

m.plough();
}
}
eat food
Hello World
women is weaving
eat food
Hello World
Men is ploughing

结果

二:信息隐藏

.Man extends Human 表示Man继承于Human
.Human是父类,Man是子类
.子类继承父类所有的属性和方法(但不能直接访问private成员)
.根据信息隐藏原则:子类会继承父类所有的方法。可以直接使用。
.子类也会继承父类的父类的所有的属性和方法(但不能直接访问private成员)

三:单根继承(不同于C++)

1.单根继承原则:每个类都只能继承一个类
2.如果不写extends,Java类都默认继承java.lang.Object类
3.class Human extends java.lang.Object
4.Java所有类从java.lang.Object开始,构建出一个类型继承树
5.Object类里面默认就有clone, equals, finalize, getClass,
hashCode, toString等
C++允许继承多个父类

四:this和super

(一)this

1.this是对象方法中的隐藏参数们可以用于调用对象中的各个方法和变量。
2.this可以实现调用其他构造方法
class Person {

    String name, department;

    int age;

    public Person(String n){ name = n; }

    public Person(String n, int a){ name = n; age = a; }

    public Person(String n, String d, int a) {

        // doing the same as two arguments version of constructor 

        // including assignment name=n,age=a

        department = d;

   }

}

Which expression can be added at the "doing the same as..." part of the constructor? 
A.Person(n,a);

B.this(Person(n,a));

C.this(n,a);

D.this(name,age);

(二)super

默认调用:

每个子类的构造函数的第一句话,都默认调用父类的无参数构造函数super(),除非子类的构造函数第一句话是super,而且super语句必须放在第一条,不会出现连续两条super语句。
public class Human {
public Human() {
System.out.println("Human construct exec");
} public void say() {
System.out.println("Hello World");
} public void eat() {
System.out.println("eat food");
}
}

Human 父类

public class Men extends Human{
public Men() { System.out.println("Men construct exec");
} public void plough() {
System.out.println("Men is ploughing");
}
}

Men子类

public class HumanTest {
public static void main(String args[]) {
Men m=new Men();
}
}
Human construct exec    //先执行父类构造
Men construct exec //再执行子类构造

显式调用:

public class Human {
public Human() {
System.out.println("Human construct exec");
} public Human(int a) {
System.out.println("Human construct exec"+a);
} public void say() {
System.out.println("Hello World");
} public void eat() {
System.out.println("eat food");
}
}

Human父类

public class Men extends Human{
public Men() {
super();
System.out.println("Men construct exec");
} public void plough() {
System.out.println("Men is ploughing");
}
}

Human子类

public class HumanTest {
public static void main(String args[]) {
Men m=new Men();
}
}
Human construct exec5
Men construct exec

注意:父类只有含参构造,则子类必须显式调用super(参数)

注意:super只能调用可以由父类继承过来的方法和成员

class TestA{
private int i; public TestA(int i) {
this.i=i;
} public String toString() {
System.out.println("i="+i);
return " "+i;
} protected void say() {
System.out.println("super can call me");
} private void say2() {
System.out.println("super can`t call me");
}
} interface TestTable{
public int s=11; //接口声明的成员默认都是常量,必须赋初值,不允许默认值,而且继承的类不允许修改该变量
} public class Test extends TestA implements TestTable{
public Test(int i){
super(i);
//super.i 不能继承,故super不能调用
//super.say2() 不能继承,故super不能调用

super.say();
} public static void main(String[] args) {
// TODO Auto-generated method stub } }

五:重写和重载

(一)重载:overload

多个方法:相同名字,不同参数,便产生了重载。编译器会通过参数去判断具体执行哪一个方法。叫做重载解析
public class Men extends Human{
public Men() {
System.out.println("Men construct exec");
} public Men(int a) {
System.out.println("Men construct exec");
} public Men(int a,int b) {
System.out.println("Men construct exec");
} public void plough() {
System.out.println("Men is ploughing");
} public void plough(int a) {
System.out.println("Men is ploughing");
} }

(二)重写/覆盖

子类同样实现了父类的方法,相同名字和参数,将父类方法覆盖。调用子类对象时会先在该子类中去寻找,向上查找,在当前子类查找成功,就不会继续向上。

Men construct exec
Men is eating

(三)重写规则《重点》

(1)重写方法不能比被重写方法限制有更严格的访问级别。

    现有
public class Parent{
public void change (int x){
}
} public class Child extends Parent{
//覆盖父类change方法 }
下列哪个声明是正确的覆盖了父类的change方法?
A.public void change (int x){}

B.protected void change (int x){}  //比父类限制更加严格是不对的


重写方法限制更加宽松是可以的(前提是该方法可以继承)

(2)参数列表必须与被重写方法的相同。

(3)返回类型必须与被重写方法的返回类型相同

(4)重写方法不能抛出新的异常或者比被重写方法声明的检查异常更广的检查异常。但是可以抛出更少,更有限或者不抛出异常。

注意:这种限制只是针对检查异常,至于运行时异常RuntimeException及其子类不再这个限制之中。

(5)不能重写被标识为final的方法。

(6)如果一个方法不能被继承,则不能重写它。如private方法

(7)子类不能用 静态方法重写父类的非静态方法

(8)子类不能用非静态方法重写父类的静态方法

JAVA核心技术I---JAVA基础知识(类的继承)的更多相关文章

  1. 《Java核心技术·卷Ⅰ:基础知识(原版10》学习笔记 第5章 继承

    <Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 目录 <Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 5.1 类.超类和子类 5.1 ...

  2. Java核心技术 卷1 基础知识-第一天

    基本数据类型 java是一种强数据类的的语言 共有8种基本数据类型 其中: 整型4种 int(4字节) short(2字节) long(8字节) byte(1字节) java中整型的范围与机器无关 长 ...

  3. C#基础知识——类的继承

    继承是C#的三大特性之一,它实现了多态性和代码复用 我们可能会在一些类中,写一些重复的成员,我们可以将这些重复的成员,单独的封装到一个类中,作为这些类的父类. Student.Teacher.Driv ...

  4. 第二十九节:Java基础知识-类,多态,Object,数组和字符串

    前言 Java基础知识-类,多态,Object,数组和字符串,回顾,继承,类的多态性,多态,向上转型和向下转型,Object,数组,多维数组,字符串,字符串比较. 回顾 类的定义格式: [类的修饰符] ...

  5. Java核心技术第五章——1.类、超类、子类(2)

    继上一篇Java核心技术第五章——1.类.超类.子类(1) 6.重载解析 假如调用ClassName.Method(args) 1.编译器列出类ClassName所有名为Method的方法. 2.编译 ...

  6. [Java面试三]JavaWeb基础知识总结.

    1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供外界访问的Web资源分为: • 静 ...

  7. Java学习之旅基础知识篇:数据类型及流程控制

    经过开篇对Java运行机制及相关环境搭建,本篇主要讨论Java程序开发的基础知识点,我简单的梳理一下.在讲解数据类型之前,我顺便提及一下Java注释:单行注释.多行注释以及文档注释,这里重点强调文档注 ...

  8. java 程序运行的基础知识【Java bytecode】

    聊聊文字,写一篇关于 java 基础知识的博文. JVM 线程栈 到 函数运行 每一个JVM线程来说启动的时候都会创建一个私有的线程栈.一个jvm线程栈用来存储栈帧,jvm线程栈和C语言中的栈很类似, ...

  9. Java学习1——计算机基础知识

    本文包含了一些计算机基础知识:计算机组成:Windows常用快捷键:DOS常用命令:计算机语言发展史.

  10. Java中浮点数的基础知识

    偶然查看Math.round的JDK public static int round(float a) { if (a != 0x1.fffffep-2f) // greatest float val ...

随机推荐

  1. codeforces1045B Space Isaac 【manacher】【差分】

    题目大意: 题目是将$[0,m)$的数划成了两个集合,其中一个集合的元素个数不超过$n$.问在第一个集合中选出的数加上第二个集合中选出的数的和中没有出现的数有哪些. 题目分析: 很有意思的一道题.方便 ...

  2. UOJ276 [清华集训2016] 汽水 【二分答案】【点分治】【树状数组】

    题目分析: 这种乱七八糟的题目一看就是点分治,答案有单调性,所以还可以二分答案. 我们每次二分的时候考虑答案会不会大于等于某个值,注意到系数$k$是无意义的,因为我们可以通过转化使得$k=0$. 合并 ...

  3. 【XSY2808】董先生的休闲方案 组合数学

    题目描述 有\(n\)个方案,编号为\(1\ldots n\). 最开始你不知道每个方案的编号. 你要按顺序提出这些方案. 每一个时刻你要做以下事情: 如果你阅读过下一个方案,就提出这个方案. 否则随 ...

  4. wstngfw openVpn站点到站点连接示例(SSL/TLS)

    wstngfw openVpn站点到站点连接示例(SSL/TLS) 在本例中,将假设以下设置: 站点 A 站点 B 名称 Beijing Office(北京办公室) 名称 Shenzheng Offi ...

  5. php 排序数组array_multisort

    $arr[] = array('name'=>'a','flag'=>1); $arr[] = array('name'=>'b','flag'=>2); $arr[] = a ...

  6. MT【257】任意存在并存

    函数$f(x)=\dfrac{4x}{x+1}(x>0),g(x)=\dfrac{1}{2}(|x-a|-|x-b|),(a<b)$, 若对任意$x_1>0$,存在$x_2\le x ...

  7. 洛谷P3953 逛公园(NOIP2017)(最短/长路,拓扑排序,动态规划)

    洛谷题目传送门 又是一年联赛季.NOIP2017至此收官了. 这个其实是比较套路的图论DP了,但是细节有点恶心. 先求出\(1\)到所有点的最短路\(d1\),和所有点到\(n\)的最短路\(dn\) ...

  8. 安卓Q | 诸多本地文件找不到?应用文件存储空间沙箱化适配指导

    上期我们针对Android Q 版本中对设备存储空间进行的限制.新特性变更引发的兼容性问题及原因分析推出了<安卓 Q | 8大场景全面解析应用存储沙箱化>文章,本期文章我们将手把手指导各位 ...

  9. 【Luogu2664】树上游戏(点分治)

    [Luogu2664]树上游戏(点分治) 题面 洛谷 题解 很好的一道点分治题. 首先直接点分治,考虑过每个分治重心的链的贡献. 我们从分治重心开始找每种颜色,强制令一种颜色只在其到分治重心的链上第一 ...

  10. rt-thread 低优先级线程挂起高优先级线程失败

    @2019-01-13 [小记] 使用rt-thread线程管理功能时,低优先级线程挂起高优先级线程失败,高优先级线程或同等优先级线程挂起低优先级线程则成功.