/*
* 定义员工类Employee
*/
class Employee {
String name; // 定义name属性
public void work() {// 定义员工的工作方法
System.out.println("尽心尽力地工作");
}
}
Developer.java:
/*
* 定义研发部员工类Developer 继承 员工类Employee
* 继承了父类中所有非private修饰的成员变量
*/
class Developer extends Employee {
// 定义一个打印name的方法
public void printName() {
System.out.println("name=" + name);
}
}
*测试员工类与研发部员工类:
/*
* 定义测试类
*/
public class Example01 {
public static void main(String[] args) {
Developer d = new Developer(); // 创建一个研发部员工类对象
d.name = "小明"; // 为该员工类的name属性进行赋值
d.printName(); // 调用该员工的printName()方法
d.work(); // 调用Developer类继承来的work()方法
}
}
class A{}
class B{}
class C extends A,B{} // C类不可以同时继承A类和B类
class A{}
class B extends A{}
class C extends A{} // 类B和类C都可以继承类A
class A{}
class B extends A{} // 类B继承类A,类B是类A的子类
class C extends B{} // 类C继承类B,类C是类B的子类,同时也是类A的子类
Fu.java
public class Fu{
//Fu中的成员变量。
int num = 5;
}
Zi.java
public class Zi extends Fu {
//Zi中的成员变量
int num = 6;
void show(){
//子类的局部变量
int num=7;
//直接访问,遵循就近查找原则
System.out.println(num);//7
//子父类中出现了同名的成员变量时
//在子类中需要访问父类中非私有成员变量时,需要使用super关键字
//访问父类中的num
System.out.println("Fu num="+super.num);//5
//访问子类中的num2
System.out.println("Zi num2="+this.num);//6
}
}
Test.java
public class Test {
public static void main(String[] args) {
Zi z = new Zi(); //创建子类对象
z.show(); //调用子类中的show方法
}
}
public class Fu {
public void show(){
System.out.println("Fu show");
}
}
Zi.java
public class Zi extends Fu {
//子类复写了父类的show方法
public void show(){
System.out.println("Zi show");
}
}
Test.java
public class Test {
public static void main(String[] args) {
Zi z = new Zi();
z.show(); //Zi show 子类有直接使用子类
}
}
Phone.java
public class Phone {
public void sendMessage(){
System.out.println("发短信");
}
public void call(){
System.out.println("打电话");
}
public void showNum(){
System.out.println("来电显示号码");
}
}
NewPhone.java
public class NewPhone extends Phone {
//覆盖父类的来电显示号码功能,并增加自己的显示姓名和图片功能
//从现实生活角度考虑沿用原有的showNum方法名便于用户更快熟悉和接受,而不是再起个新的名字
//用户还需要花费大量时间慢慢接受
public void showNum(){
//调用父类已经存在的功能使用super
//如果不加super这是调用子类自身的showNum(),自己调用自己,递归
//方法不断入栈导致内存溢出
super.showNum();
//增加自己特有显示姓名和图片功能
System.out.println("显示来电姓名");
System.out.println("显示头像");
}
}
Test.java
public class Test {
public static void main(String[] args) {
new NewPhone().showNum();//来电显示 显示来电姓名 显示头像
}
}
Develop.java
public abstract class Develop {
public abstract void work();
}
JavaEE.java
public class JavaEE extends Develop{
//重写父类的抽象方法
//去掉abstract修饰符,加上方法主体
public void work(){
System.out.println("JavaEE工程师在开发B/S 软件");
}
}
Test.java
public class Test {
public static void main(String[] args) {
JavaEE ee = new JavaEE();
ee.work();//"JavaEE工程师在开发B/S 软件"
}
}
继承的体系,抽象类强制子类重写抽象的方法
例如:抽象员工类中规定一个方法,工作(work),那么子类(JavaEE员工)中就必须有工作(work)方法
public abstract class Employee {
private String name; // 员工姓名
private String Id;// 员工编号
public abstract void work();//工作方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return Id;
}
public void setId(String id) {
Id = id;
}
}
Develop.java
public abstract class Develop extends Employee {
}
Maintainer.java
public abstract class Maintainer extends Employee {
}
JavaEE.java
public class JavaEE extends Develop {
//JavaEE开发工程师类
@Override
public void work() {
System.out.println("员工号为"+super.getId()+"的"+super.getName()+"员工,正在研发淘宝网站");
}
}
Android.java
public class Android extends Develop {
//Android工程师类
@Override
public void work() {
System.out.println("员工号为"+super.getId()+"的"+super.getName()+"员工,正在研发淘宝手机客户端软件");
}
}
Network.java
public class Network extends Maintainer {
//网络维护工程师类
@Override
public void work() {
System.out.println("员工号为"+super.getId()+"的"+super.getName()+"员工,正在检查网络是否畅通");
}
}
Hardware.java
public class Hardware extends Maintainer {
//硬件维护工程师类
@Override
public void work() {
System.out.println("员工号为"+super.getId()+"的"+super.getName()+"员工,正在修复打印机");
}
}
Test.java
public class Test {
public static void main(String[] args) {
//创建对象
JavaEE ee = new JavaEE();
//设置编号
ee.setId("100015");
//设置姓名
ee.setName("张三");
//调用方法
ee.work();
Android an = new Android();
an.setId("200007");
an.setName("李四");
an.work();
Network net = new Network();
net.setId("300123");
net.setName("王五");
net.work();
Hardware ha = new Hardware();
ha.setId("400110");
ha.setName("赵六");
ha.work();
}
}