java 重写 关键字,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("创建一个鸟对象");

}

}

运行结果:

创建一个动物

创建一个鸟对象

作用与继承相同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值