Java继承

继承是多态的前提,如果没有继承就没有多态

在面向对象程序设计中,继承表示两个类之间的一种从属关系。

子类不仅仅可以从父类继承成员变量和成员方法,还可以重新定义它们,以及扩充新的内容。

一个父类可以同时拥有多个子类。一个类只能有一个父类。

 在讲师类和助教类中都姓名和工号,重复几次,我们就要重复的编写代码。所以在程序当中继承主要就是解决的问题就是:共性抽取(解决重复代码)。所以我们就来定义一个员工类,这样讲师和主教都是属于员工类,我们就可以继承员工类。

继承关系的特点:(1)子类可以拥有父类的“内容”

                             (2)子类还可以拥有自己的专属内容          ​​​​​​​     

例如:我们定义一个父类

package com.smxy.koi.jicheng;

public class Empoloyee {
		public void method(){
			System.out.println("方法执行!!");
		}
}

接下来定义一个子类(Teacher)

选择Browse

 

 

   ​

 这个时候我们的子类就已经继承了我们的父类了(如下图所示)

 我们的Teacher里面不写任何方法,然后在我们的测试类中调用Teacher

package com.smxy.koi.jicheng;

public class Teacher extends Empoloyee {

}
package com.smxy.koi.jicheng;

public class Test {

	public static void main(String[] args) {
		//创建一个子类对象
		Teacher teacher=new Teacher();
		//Teacher类当中虽然说什么都没有写,但是它会继承父类的method方法
		teacher.method();

	}

}

父类和子类发生了继承关系,如果使用了成员变量会有怎样的规则

首先创建一个父类

 

package com.smxy.koi.jicheng;

public class Fu {
	int numFu=10;
}

然后在创建一个子类

package com.smxy.koi.jicheng;

public class Zi extends Fu{
	int numZi=20;
}

这个时候父类就有一个值,但是子类就有两个值(例如如下)

当我们创建一个父的对象然后调用的时候就会发现只能调用一个

 但是调用子类的时候就会发现是有两个可以调用,其中一个是父类的,另外一个是子类的

 

package com.smxy.koi.jicheng;

public class Test {

	public static void main(String[] args) {
		Fu fu=new Fu();//父类对象
		System.out.println(fu.numFu);//只能使用父类东西,没有任何子类内容
		Zi zi=new Zi();
		System.out.println(zi.numFu);//10
		System.out.println(zi.numZi);//20
	}

}

子类可以拥有父类继承下来的东西

 


当父类和子类重名的时候

我们在子类中定义一个int num=200;

然后在父类中定义一个int num=100;

这样子类和父类就重名了

在父子类的继承关系中,如果成员变量重名,则创建子类对象时,访问有两种方式

  1. 直接通过子类对象访问成员变量

                        等号左边是谁,就优先用谁,没有则向上找

 所以最后就是我们子类的200.

2.间接通过成员方法访问成员变量

在父类中创建一个方法

 在子类中创建一个方法

我们在调用方法的时候,注意方法在哪优先哪里

 

 


区分子类方法重名三种

创建一个父类

package com.smxy.koi.jicheng;

public class Fu {
	int num=10;
	
}

创建一个子类

package com.smxy.koi.jicheng;

public class Zi extends Fu{
	int num=20;
	
	public void methodZu(){
		int num=30;
		System.out.println(num);
	}
}

这样我们通篇就有三个num

变量有三种
 * 局部变量;        直接写成员变量
 * 本类的成员变量;    this.成员变量
 * 父类的成员变量;    super.成员变量
我们在子类的merhod方法中就拥有了三个num

package com.smxy.koi.jicheng;

public class Zi extends Fu{
	int num=20;
	
	public void method(){
		int num=30;
		System.out.println(num);//30;局部变量
		System.out.println(this.num);//20;本类的成员变量
		System.out.println(super.num);//10;父类的成员变量
	}
}

我们在测试类中运行

package com.smxy.koi.jicheng;
/**
 * 变量有三种
 * 局部变量;		直接写成员变量
 * 本类的成员变量;	this.成员变量
 * 父类的成员变量;	super.成员变量
 * 
 *
 */
public class Test {

	public static void main(String[] args) {
		Zi zi=new Zi();
		zi.method();
	}
		
}

这样无论是子类的怒骂,还是父类的num都可以被运行出来


当父类和子类中的方法一样

在父子类的继承关系中,创建子类对象,访问成员方法的规则,创建的对象是谁,就优先用谁,如果没有则向上找

注意:无论是成员方法还是成员变量,如果没有都是向上找父类,绝对不会向下找子类

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值