继承extends与 抽象类 abstract

继承的父子成员特点

子类继承父类:

  1:子类可以访问父类的非私有成员

  2:可以在子类中添加子类特有成员

 

 

继承的作用

 1)继承可以提供代码的复用性:父类中的一个方法,所有的子类的都用

 2)提供了程序的可扩展性


1:Java支持单继承

  a:一个子类只能有一个父类(一个儿子只能有一个爹)

  b:一个父类可以有多个子类(一个爹可以有多个儿子)

  c:任何一个类如果没有指定父类,则他的父类默认就是Object

 为什么Java不支持多继承?

   如果两个父类中出现一模一样的方法,则子类如果都继承过来,在调用该方法时,会出现问题




 super关键字(重点)

   特点:

1:superthis一样也是一个引用,this是存放本类对象的地址,super是存放父类空间的地址

2:super只能访问到子类的直接父类(亲爹)

3:在任何一个类内部,都有一个隐藏的super,指向父类空间

什么需要使用super?

 1:子类和父类出现了同名的变量,super来区分

 2:子类和父类出现了同名的方法,super来区分

 3:如果子类要调用父类的构造方式时,使用super(参数)


父子类构造方法的关系(重点)

  特点:

    1:当然创建子类对象时,系统会默认先调用父类的无参构造,如果父类还有父类,则会先行顶层类的构造

 为什么子类会会调用父类的无参构造?

   在子类构造方法的第一行有一个隐藏的super(),会自动调用父类的无参构造

  意义:

    在创建子类对象时,父类也会被开辟空间,父类的空间也要被初始化,所以在给子类空间初始化之前.必须先给父类的空间初始化,所以必须调用父类构造


方法的重写(重点)

 特点:

   1:子类写一个和父类一模一样的方法,这就是方法的重写

   2:当调用重写后的方法时,执行的是子类的方法,就好像父类的方法被覆盖一样

 意义:

   当子类从父类继承一些方法时,如果父类的方法不能满足子类需求,则子类需要重写这些方法

需要注意的问题:

  public > protected > 默认权限 > private

  1:子类在重写父类方法时,子类方法的访问权限必须大于等于父类

  2:如果父类的方法是private修饰,即使子类写一个和父类一样的方法,也不是重写.因为子类根本就不知道父类有这个方法,谈不上重写

  3:当我们重写父类的方法时,只要和父类方法写的一模一样即可.

抽象方法

   a:这种方法没有方法体(没有{})

   b:抽象方法必须使用一个abstract关键字来声明

   c:如果一个类有抽象方法,则该类必须加abstract关键字来声明

2:抽象类

   a:类的前边有abstract关键字

   b:抽象类不能创建对象

   c:抽象类要作为父类

   d:如果一个子类继承了抽象类,则必须重写该类中所有的抽象方法,否则该类还是抽象类

   e: 抽象类不能创建对象,但是可以有构造方法,这个构造是给子类准备的.

   f:一个抽象类可以没有抽象方法,这种类唯一的意义是不让我们创建该类的对象

 2.2  抽象类的特点

     抽象类不能创建对象,但是可以有构造方法,这个构造是给子类准备的.

 2.3  抽象类的作用

我在设计一个类时,如果该类中的某个方法描述不清楚,该方法应该设为抽象方法,该类设为抽象类







IT公司有多名员工,按照员工负责的工作不同,进行了部门的划分(研发部员工、维护部员工)。研发部根据所需研发的内容不同,又分为JavaEE工程师、Android工程师;维护部根据所需维护的内容不同,又分为网络维护工程师、硬件维护工程师。

公司的每名员工都有他们自己的员工编号、姓名,并要做它们所负责的工作。

l 工作内容

n JavaEE工程师:员工号为xxx的 xxx员工,正在研发淘宝网站

n Android工程师:员工号为xxx的 xxx员工,正在研发淘宝手机客户端软件

网络维护工程师:员工号为xxx的 xxx员工,正在检查网络是否畅通

硬件维护工程师:员工号为xxx的 xxx员工,正在修复打印机


请根据描述,完成员工体系中所有类的定义,并指定类之间的继承关系。进行XX工程师类的对象创建,完成工作方法的调用。

1.1 案例分析

l 根据上述部门的描述,得出如下的员工体系图 


l 根据员工信息的描述,确定每个员工都有员工编号、姓名、要进行工作。则,把这些共同的属性与功能抽取到父类中(员工类),关于工作的内容由具体的工程师来进行指定。

n 工作内容

u JavaEE工程师:员工号为xxx的 xxx员工,正在研发淘宝网站

u Android工程师:员工号为xxx的 xxx员工,正在研发淘宝手机客户端软件

网络维护工程师:员工号为xxx的 xxx员工,正在检查网络是否畅通

硬件维护工程师:员工号为xxx的 xxx员工,正在修复打印机

创建JavaEE工程师对象,完成工作方法的调用


员工类:

package Employee;

public abstract class Employee {

	private String id;
	private String name;
	public abstract void work();
	
	public Employee() {
		super();//访问父类对象的空参方法
	}
	
	public Employee(String id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	
	
}

研发部员工类:

package Employee;

public abstract class Developer extends Employee {

	public Developer() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Developer(String id, String name) {
		super(id, name);
		// TODO Auto-generated constructor stub
	}
	
	
	

}

维护部员工类:

package Employee;

public abstract class Maintainer extends Employee {

	public Maintainer() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Maintainer(String id, String name) {
		super(id, name);
		// TODO Auto-generated constructor stub
	}
	


}

javaEE

package Employee;

public class JavaEE extends Developer {
	
	

	@Override
	public void work() {
		System.out.println("员工号为"+getId()+"的 "+getName()+"员工,正在研发淘宝网站");

	}

	public JavaEE() {
		super();
		// TODO Auto-generated constructor stub
	}
	public JavaEE(String id, String name){
		super(id,name);
	}



}

Android:

package Employee;

public class Android extends Developer {

	@Override
	public void work() {
		System.out.println("员工号为"+getId()+"的 "+getName()+"员工,正在研发淘宝手机客户端软件");

	}

	public Android() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Android(String id,String name){
		super(id,name);
	}

}

硬件维护:

package Employee;

public class Hardware extends Maintainer {

	@Override
	public void work() {
		System.out.println("员工号为"+getId()+"的 "+getName()+"员工,正在修复打印机");

	}

	public Hardware() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Hardware(String id,String name){
		super(id,name);
	}

}

软件维护:

package Employee;

public class Network extends Maintainer {

	@Override
	public void work() {
		System.out.println("员工号为"+getId()+"的 "+getName()+"员工,正在检查网络是否畅通");

	}

	public Network() {
		super();
		// TODO Auto-generated constructor stub
	}
	
	public Network(String id,String name){
		super(id,name);
	}
}

测试类:

package Employee;

public class Test {

	public static void main(String[] args) {
		JavaEE javaEE = new JavaEE();
		javaEE.setId("t001");
		javaEE.setName("小强");
		javaEE.work();
		
		JavaEE javaEE2 = new JavaEE("t002","小明");
		javaEE2.work();

	}

}


  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值