继承
1.1.继承基本使用
-
继承的使用用来解决 代码冗余问题
-
子类 使用关键字extends 去继承父类(子承父业);只有通过 IS-A测试 什么什么是一个什么什么时才能使用继承 不能乱用;
-
子类(派生类 后代类)一旦继承父类(基类)之后, 子类自动拥有父类的一切成员(成员变量,方法),但是子类只能访问可访问的;
-
有了继承关系后,构造方法的执行有顺序了,在子类构造方法中 必须要先执行父类的某一个构造方法 ;只是执行父类的构造方法而已 并没有什么父类对象产生;
-
子类构造方法中 如果没有显示添加有关父类的构造方法的调用 ,编译器默认添加父类无参构造的调用;
-
-
Java只支持单继承,子类只能有一个父类;
-
继承体系中Object类 是所有类型的根基类,所有的类都是Object的子类型;所有类型的对象都能调用Object中的方法
-
当类型声明后面没有显示添加extends ,编译器默认添加 extends Object
-
父类 员工类
//父类
public class Employee {
private int id;
private String name;
private char gender;
private double salary;
public Employee() {
System.out.println("父类无参构造执行了");
}
public Employee(int id, String name, char gender, double salary) {
this.id = id;
this.name = name;
this.gender = gender;
this.salary = salary;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
子类1 SE
//通过 IS-A测试 什么什么是一个什么什么
// SE是子类 继承 Employee父类;子类自动拥有父类的一切成员
public class SE extends Employee {
//子类特有的属性
private int hot;
/*在子类构造方法中 必须要先去执行父类的某一个 构造方法
****子类构造方法中 如果没有显示添加有关父类的构造方法的调用 ,编译器默认添加父类无参构造的调用;
*/
public SE() {
//调用父类的无参构造方法,只能出现在代码首行
super();
System.out.println("子类无参构造执行了");
}
public SE(int id, String name, char gender, double salary, int hot) {
super(id, name, gender, salary);
this.hot = hot;
}
public int getHot() {
return hot;
}
public void setHot(int hot) {
this.hot = hot;
}
}
子类2 PM
public class PM extends Employee {
private String exp;
private double bonus;
public PM() {
}
public PM(int id, String name, char gender, double salary, String exp, double bonus) {
super(id, name, gender, salary);
this.exp = exp;
this.bonus = bonus;
}
public String getExp() {
return exp;
}
public void setExp(String exp) {
this.exp = exp;
}
public double getBonus() {
return bonus;
}
public void setBonus(double bonus) {
this.bonus = bonus;
}
}
1.2. super关键字
-
super 和this类似;this指代当前对象,super指代父类型
-
super使用场景
-
子类构造方法中通过super( ) ;调用父类的构造方法
-
当子类成员和父类成员(成员变量,方法)重名了,必须使用super区分要访问的是父类成员
-
父类
public class Father {
private int age;
public String name;
public Father() {
}
public Father(int age, String name) {
this.age = age;
this.name = name;
}
public void read() {
System.out.println("阅读红楼梦");
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
子类
public class Son extends Father {
private String name;
public Son() {
}
public Son(int age, String name) {
super(age, name);
}
/**
* Override注解 为了帮助检查是否符合重写的语法
*/
@Override
public void read() {
//子类成员变量和父类成员变量重名了,使用super去区分要访问的是父类成员
super.read();
System.out.println("阅读西游记");
}
public void study() {
//子类成员变量和父类成员变量重名了,使用super去区分要访问的是父类成员
System.out.println(super.name + "在学习");
}
}
1.3.方法的重写
-
子类对继承的方法如果不满意,就重写
-
子类重写的方法和被重写的方法 要有相同的方法声明
-
重写 是发生 继承关系基础下的,一定是有了继承之后 才会有重写
方法重写和方法重载的区别
-
方法重载 是同一个类体中,方法名相同 形参列表不同
-
方法重写 有了继承关系后,子类重写父类的方法
1.4.权限修饰符
-
权限修饰符 4个 修饰class,成员变量,方法
-
一般使用public和缺省去修饰class
-
权限 能在哪些地方访问所被修饰的成员
| 修饰符 | 本类 | 同一个包 | 子类 | 任意地方 |
|---|---|---|---|---|
| private | Y | |||
| 缺省(不写 包级权限) | Y | Y | ||
| protected | Y | Y | Y | |
| public | Y | Y | Y | Y |
父类
package com.edu.www.day0419.exer6;
public class Animal {
private int age;
/**
* 私有 独有
*/
public void eat() {
}
public void run() {
eat();
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
子类
package com.edu.www.day0419.exer6.exer66;
import com.edu.www.day0419.exer6.Animal;
public class Monkey extends Animal {
public void jump() {
eat();
}
}
1.5. package和import
-
package包机制:为了解决类名冲突的问题; 起名字 公司域名的倒写;必须在源文件的首行
-
import 表示引入导入一个类型; 后面是类的全路径(包名+类名)
-
同一个包下面的类型 不需要引用;如果不在同一个包下面 必须要引入才能使用这个类型
-
如果是位于java.lang这个包下面的类 都不需要显示import都是自动引入进来的;
-
//包机制:为了解决类名冲突的问题;
//起名字 公司域名的倒写;必须在源文件的首行
package com.edu.www.day0419.exer6.exer66;
// import 表示引入导入一个类型; 后面是类的全路径(包名+类名)
import com.edu.www.day0419.exer6.Animal;
import java.util.Scanner;
//同一个包下面的类型 不需要引用;如果不在同一个包下面 必须要引入才能使用这个类型
//如果是位于java.lang这个包下面的类 都不需要显示import都是自动引入进来的;
public class Test2 {
public static void main(String[] args) {
Monkey monkey;
Animal animal;
String str;
Math math;
Scanner sc;
}
}
757

被折叠的 条评论
为什么被折叠?



