Java-继承

来源:互联网 发布:linux文件目录介绍 编辑:程序博客网 时间:2024/06/05 12:40
继承

以下图为例

编写父类
/**
* 工程师类--父类
* @author Administrator
*/
public class Engineer {
//公有的属性和方法
//protected 子类可以继承
protected int id;
protected String name;
protected String enterTime;
public Engineer(int id, String name, String enterTime) {
super();
this.id = id;
this.name = name;
this.enterTime = enterTime;
}

public void showInfo(){
System.out.println("编号:"+id+"\n姓名:"+name+"\n入职时间:"+enterTime);
}
}
编写子类,继承父类--extends继承关键字,只能继承一个父类
子类访问父类成员>使用super关键字
访问父类属性>super . name; (super代表父类对象)
访问父类方法>super . print();
/**
* 软件工程师继承工程师类
* @author Administrator
*
*/
public class SoftEngineer extends Engineer{
//独有的属性和方法
private String type;//语言类型

public SoftEngineer(int id, String name, String enterTime,String type) {
super(id, name, enterTime);
this.type=type;
// TODO Auto-generated constructor stub
}
public void coding(){
System.out.println("正在编程");
}
@Override
public void showInfo() {
// TODO Auto-generated method stub
super.showInfo();
System.out.println("\n语言类型:"+type);
}
}
* 测试工程师继承工程师类
public class TestEngineer extends Engineer {
private String level;//语言类型
public TestEngineer(int id, String name, String enterTime,String level) {
super(id, name, enterTime);
this.level=level;
// TODO Auto-generated constructor stub
}
public void test(){
System.out.println("开始测试");
}
/**
* 方法重写的默认行为是调用父类方法内容
* 作用:可以在子类中修改父类的方法内容
*/
@Override//重写 以@开头的标识符叫注解
public void showInfo() {
// TODO Auto-generated method stub
super.showInfo();
System.out.println(",等级"+level);
}
}
测试类
public class Test {
public static void main(String[] args) {
//调用父类中定义的方法结果:
//1.如果子类中没有重写父类的方法,调用的就是父类的实现
//2.如果子类中重写了父类的方法,调用的就是子类中的实现
SoftEngineer soft=new SoftEngineer(1, "zqq", "2017-08-09", "java");
soft.showInfo();
soft.coding();
TestEngineer test=new TestEngineer(2, "zzz", "2015-05-02", "初级测试工程师");
test.showInfo();
test.test();
}
}
继承后的初始化顺序
  • 父类属性
  • 父类代码块
  • 父类构造方法
  • 子类属性
  • 子类代码块
  • 子类构造方法
一个类创建对象时 的初始化顺序:属性、代码块(初始化)、构造
有继承关系,先有父类,再有子类
父类的构造,子类一定要调用

例如:
1. protected int a=10;//先创建属性
public A() {
System.out.println("先初始化了a属性:a="+a);//才调用的构造函数
System.out.println("再调用了a的构造");
}

2. //初始化
{
b=30;
a=10;
System.out.println("b初始化");
}
//构造函数
public B() {
System.out.println("先初始化了b属性:b="+b);//才调用的构造函数
System.out.println("再调用了b的构造");
}
有些父类成员不能继承
  • 子类不能访问父类private成员
  • 子类与父类不在同包,使用默认访问权限的成员
  • 构造方法
何时使用继承
  • 继承与真实世界类似 符合is-a关系的设计使用继承
  • 继承是代码重用的一种方式 将子类都有的属性和行为放到父类中