Java继承原理
2017-07-06 本文已影响248人
952625a28d0d
package com.example;
import java.security.PublicKey;
/**
* Created by JiaYuanFa on 2017/7/6.
*/
/*
一:为什么需要继承?
public class Teacher{
String name;
String school;
public void run() {
System.out.println("在跑步");
}
public void jiaoShu() {
System.out.println("老师在教书");
}
}
public class Wocker{
String name;
String factory;
public void run(){
System.out.println("在跑步");
}
public void ganhuo(){
System.out.println("工人在干活");
}
}
上述设计类的过程有重复的代码:这个在软件中叫代码的冗余,我们需要解决,作为好的程序不能出现重复的代码,所以有了继承
二:什么是继承
继承是指继承者拥有被继承者的某些特征
有点像儿子继承老子,但是儿子也有自己独特的地方
继承是类与类之间的关系,是群体与群体之间的关系
继承有没有条件?
现实生活中需要血缘关系
类与类:
猪类与人类有没有继承关系?
学生类与人类有没有继承关系?
怎么去判断一个类与另一个类有没有关系?
继承条件:
1:具备"is-a"的关系
"is-a":一个类的对象也是另一个类的对象
2:关键字
extends
三:怎么使用继承
1:找个各个类共同的父类,然后把相同属性和方法放到父类中
Teacher与Worker类共同的父类是:Human类
2: 各个类去继承父类
继承类叫做子类
被继承的类叫做父类
// A类继承B类
public class A extentds B {
}
3: 定义一个子类,去拿父类的属性
子类没有的属性 会找父类要
四:继承原理
1:java中的继承不是真正的继承
*/
class Human {
String name;
public void run(){
System.out.println("在跑步");
}
}
class Teacher extends Human {
// 相当于有了Human的非私有属性和方法
String school;
public void jiaoShu() {
System.out.println("老师在教书");
}
}
class Worker extends Human {
String factory;
public void ganhuo(){
System.out.println("工人在干活");
}
}
/*
四:继承的原理
1:java的继承不是真正的继承
(1):每次构造子类对象都是先去构造父类对象
super()调用父类无参数的构造方法 必须在第一句
super(参数)调用父类有参的构造方法 必须在第一句
this();调用当前类的无参构造方法 必须在第一句
this(参数);调用当前类的有参构造方法 必须在第一句
super和this不可能同时出现在同一个构造方法中!
2:java的继承是单继承,一个子类只能继承一个父类
3:父类的什么属性不能被子类继承
(1)私有的属性和方法不能被子类继承
(2)构造方法不能被子类继承 构造方法是描述对象产生的过程 所以不能被继承
4:当一个父类只有一个有参数的构造方法的时候,子类必须手动通过super(参数)调用父类的构造方法 否则报错
*/
public class JiCheng {
public static void main(String[] args) {
// Teacher teacher = new Teacher();
// teacher.run();
// Worker worker = new Worker();
// worker.run();
Son son = new Son();
Son son2 = new Son();
}
}
class Father {
String name = "拉登";
public Father() {
System.out.println("父亲出生了");
}
}
class Son extends Father {
String name = "二狗子";
public Son() {
/*
// 情况一 我们没有写super()
(1) : 每次构造子类对象都是先构造父类对象
(2):那么是什么原因造成Son类构造的时候执行了父类的构造方法呢?也就是有个super()你写不写都存在,这个方法就是用来调用父类的无参数的构造方法
// 情况二 我们自己写super方法
*/
super();
System.out.println("儿子出生了");
System.out.println(super.name); // 儿子有的属性 先打印儿子的 要想拿到父类的属性 需要在属性前面加上super
}
public Son(int i) {
this();
}
}```