JAVA09——this关键字_继承(基本概念、方法的重写、Object类、super关键字、组合)

目录

this关键字(隐式参数)

继承

基本概念

小结

方法的重写(override)

Object类

super关键字

组合


this关键字(隐式参数)

  • 1.普通方法中,this总是指向调用该方法的对象
  • 2.构造方法中,this总是指向正要初始化的对象
  • 3.通过this调用其他构造方法(必须位于第一句)
  • this不能用于 static方法

在类中的方法中为默认传参,即当前对象

eg1:

public class Student {
	public void study(){
		this.name = "张三";
		System.out.println(name+"在学习");
	}
	
}

当运行对象的study方法时该对象的name属性为张三

eg2:

public class Student {
	String name;
	int id;
	
	public Student(String name,int id){
		this.name = name;
		this.id = id;
	}
}

 与name,id区分,若不加this会被当做参数的变量等于没执行任何操作

public void setName(String name){
	this.name = name;
}

同上

eg3:

public class Student {
	String name;
	int id;
	
	public Student(String name,int id){
		this();
		this.name = name;
		this.id = id;
	}
	
	public Student(){
		System.out.println("构造一个对象");
	}
	
}

继承

基本概念

类是对对象的抽象,继承是对某一批类的抽象,从而实现对现实世界更好的建模
提高代码的复用性
extands的意思是“扩展”。子类是父类的扩展

eg:

原代码:

public class Animal {

	String eye;
	
	public void run(){
		System.out.println("跑");
	}
	public void eat(){
		System.out.println("吃");
	}

}

class Human{

	String eye;
	
	public void run(){
		System.out.println("跑");
	}

	public void eat(){
		System.out.println("吃");
	}
	
	public void taiSheng(){
		System.out.println("胎生");
	}

}

class Bird{

	String eye;
	
	public void run(){
		System.out.println("跑");
	}

	public void eat(){
		System.out.println("吃");
	}
	
	public void eggSheng(){
		System.out.println("卵生");
	}

}

各类之间有共同代码或方法,使用 extends关键字继承:

public class Animal {
	String eye;
	
	public void run(){
		System.out.println("跑");
	}
	
	public void eat(){
		System.out.println("吃");
	}
	
}

class Human extends Animal{
	
	public void taiSheng(){
		System.out.println("胎生");
	}
	
}

class Bird extends Animal{
	
	public void eggSheng(){
		System.out.println("卵生");
	}
	
}

小结

  • 子类继承父类,可以得到父类的全部属性和方法(除了父类的构造方法)
  • java中只有单继承,没有像c++那样的多继承。多继承会引起混乱,使得继承链过于复杂,系统难于维护。多继承,就是为了实现代码的复用性,却引入了复杂性,使得系统类之间的关系混乱。(一个类只能有一个直接父类)
  • java中的多继承,可以通过接口来实现
  • 如果定义一个类时,没有调用 extends,则它的父类是:
    java.lang.object
  • 不同的叫法:超类、父类、基类、子类、派生类

方法的重写(override)

  • 在子类中可以根据需要对从基类中继承来的方法进行重写。
  • 重写方法必须和被重写方法具有相同方法名称、参数列表和返回类型
  • 重写方法不能使用比被重写方法更严格的访问权限。(由于多态)

eg:

Animal.java

public class Animal {
	String eye;
	
	public void run(){
		System.out.println("跑");
	}
	
	public void eat(){
		System.out.println("吃");
	}
	
}

class Bird extends Animal{
	
	public void run(){	//重写run方法
		System.out.println("飞");
	}
	
	public void eggSheng(){
		System.out.println("卵生");
	}
	
}

Test.java

public class Test {

	public static void main(String[] args) {
		Bird b = new Bird();
		b.run();
	}
	
}

实现的方法为重写后的

若重写后需调用父类:super

class Bird extends Animal{
	
	public void run(){	//重写run方法
		super.run();
		System.out.println("飞");
	}
	
	public void eggSheng(){
		System.out.println("卵生");
	}
	
}

Object类

  • Object类是所有Java类的根基类
  • 如果在类的声明中末使用 extends关键字指明其基类,则默认基类为 object类
  • 重写:toString方法:
    默认返回:包名+类名+@+哈希码
    可以重写
    哈希码:根据对象内存位置生成,唯一不重复

super关键字

  • super是直接父类对象的引用。可以通过 super来访问父类中被子类覆盖的方法或属性。
  • 普通方法:
            没有顺序限制。可以随便调用。
           每个方法都默认有两个参数:this和super
  • 构造函数中:
            任何类的构造函数中,若是构造函数的第一行代码没有显式的调用super(···);那么Java默认都会调用 super();作为父类的初始化函数。所以 super();加不加都无所谓。

组合

  • “is-a”关系使用继承
  • “has-a”关系使用组合

eg:继承中的例子:

public class Animal2 {
	String eye;
	
	public void run(){
		System.out.println("跑");
	}
	
	public void eat(){
		System.out.println("吃");
	}
	
	public Animal2(){
		System.out.println("创建一个动物");
	}
	
	public static void main(String[] args) {
		Bird2 b = new Bird2();
		b.run();
	}
	
}

class Human2{
	
	Animal2 animal2 = new Animal2();;
	public void taiSheng(){
		System.out.println("胎生");
	}
	
}

class Bird2{
	
	Animal2 animal2 = new Animal2();
	
	public void run(){
		animal2.run();
		System.out.println("飞");
	}
	
	public void eggSheng(){
		System.out.println("卵生");
	}
	
	public Bird2(){
		System.out.println("创建一个鸟对象");
	}
	
}

运行结果:

创建一个动物
创建一个鸟对象

作用与继承相同 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值