6/25作业:继承

本文详细介绍了面向对象编程中的继承概念及其作用,包括继承的语法形式、构造方法的调用规则,以及如何使用this和super关键字。此外,还探讨了方法覆盖的定义与原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.继承概念、特点、作用

---掌握继承的基本概念

---掌握继承的作用

---掌握继承的特点

(1)继承的概念

继承机制是面向对象程序设计不可缺少的关键概念,是实现软件可重用的根基,是提高软件系统的可扩展性与可维护性的主要途径。

所谓继承是指一个类的定义可以基于另外一个已经存在的类,即子类基于父类,从而实现父类代码的重用,子类能吸收已有类的数据属性和行为,并能扩展新的能力。

继承的形式

【访问权限修饰符】【修饰符】子类名  extends  父类名{子类体}

public class Shape {

public void draw(){}

}

public class Circle extends Shape{

public double getDiameter(){

return 0.0;

}

}

(2)继承的作用

子类对象可以直接调用父类的属性和方法

public class Shape {

public void draw(){}

}

public class Circle extends Shape{

public double getDiameter(){

return 0.0;

}

}

//演示代码:子类对象可以直接调用父类的方法,强调复用性

Circle circle=new Circle();

circle.draw();

2.构造方法与继承

(1)继承中构造方法的调用

子类构造方法总是先调用父类构造方法

默认情况下,调用父类无参构造方法

可以在子类构造方法的第一行,使用super关键字调用父类任意一个构造方法

子类调用父类构造方法的原因

Java 语言中,要求子类有责任保证它所继承的父类尽快进入到一个稳定、完整的状态中。如果没有这个约束,那么子类的某个继承自父类的方法可能会使用到父类中的一些变量,而这些变量并没有进行初始化,从而产生一些难以预料的后果。

 

(2)子类构造方法的执行详解

必须将调用父类构造方法的这条语句放在子类构造方法的第一条语句位置。如果第一条语句没有调用父类的构造方法,系统将会自动地在这个位置上插入一条调用父类默认构造方法的语句,super();

 

由于默认的构造方法不带参数,所以,如果在父类中定义了带参数的构造方法,而没有定义不带参数的构造方法将会出现编译错误。这也正是建议大家在定义带参数的构造方法时,一定要定义一个不带参数的构造方法的原因所在。

 

父类中那些带参数的构造方法,子类将不会自动地调用它们,必须人工地将调用它们的语句写入子类的构造方法中。

 

 

 

3.this关键字用途

this关键字代表自身,在程序中主要的用途

使用this关键字在自身构造方法内部引用其它构造方法

使用this关键字代表自身类的对象

直接使用this

使用this关键字引用成员变量

使用this关键字引用成员方法

注意:this关键字必须放在非静态方法里面

 

this引用成员变量

 

在一个类的方法或构造方法内部,可以使用this.成员变量名”这样的格式来引用成员变量名,常常用来区分同名的成员变量和局部变量。

 

public class ReferenceVariable {

private int a;

public ReferenceVariable(int a){

this.a = a;

}

public int getA(){

return a;

}

public void setA(int a){

this.a = a;

}

}

 

 

 

this引用构造方法

在一个类的构造方法内部,也可以使用this关键字引用其它的构造方法,这样可以降低代码的重复,也可以使所有的构造方法保持统一,这样方便以后的代码修改和维护,也方便代码的阅读。

public class ReferenceConstructor {

int a;

public ReferenceConstructor(){

this(0);

}

public ReferenceConstructor(int a){

this.a = a;

}

}

 

 

this引用成员方法

在一个类的内部,成员方法之间的互相调用时也可以使用this.方法名(参数)”来进行引用。

 

public class ReferenceObject {

ReferenceObject instance;

public void hello(){     System.out.println("helloWorld");

}

public void sayHello(){

     this.hello();

}

}

this代表自身对象

在一个类的内部,也可以使用this代表自身类的对象,或者换句话说,每个类内部都有一个隐含的成员变量,该成员变量的类型是该类的类型,该成员变量的名称是this

public class ReferenceObject {

ReferenceObject instance;

public ReferenceObject(){

instance = this;

}

public void test(){

System.out.println(this);

}

}

 

 

 

 

4.super关键字用途

super关键字代表父类的引用,在程序中主要的用途

在子类构造方法中要调用父类的构造方法,需要注意:super语句只能出现在子类构造方法体的第一行。

当子类方法体中的局部变量或者子类的成员变量与父类成员变量同名时,即子类局部变量覆盖父类成员变量时,用super.成员变量名”来引用父类成员变量

当子类的成员方法覆盖了父类的成员方法时,也就是子类和父类有完全相同的方法定义(方法体可以不同),此时,用super.方法名(参数列表)”的方式访问父类的方法。

this的区别,this通常指代当前对象,super通常指代父类。

 

子类构造方法中要调用父类构造方法

在子类构造方法中要调用父类的构造方法,需要注意:super语句只能出现在子类构造方法体的第一行。

class Base {

Base() {

System.out.println("Base");

}

}

 

public class Checket extends Base {

Checket() {

super();//调用父类的构造方法,一定要放在方法的首个语句

System.out.println("Checket");

}

public static void main(String argv[]) {

Checket c = new Checket();

}

}

super调用父类成员变量或方法

子类中的成员变量或方法与父类中的成员变量或方法同名。因为子类中的成员变量或方法名优先级高,所以子类中的同名成员变量或方法就隐藏了父类的成员变量或方法,但是我们如果想要使用父类中的这个成员变量或方法,就需要用到super

class Country {

String name;

 

void value() {

name = "China";

}

}

 

 

 

 

class City extends Country {

String name;

void value() {

name = "Dalian";

super.value();//不调用此方法时,super.name返回的是父类的成员变量的值null

 

System.out.println(name);

System.out.println(super.name);

}

public static void main(String[] args) {

City c=new City();

c.value();

}

}

 

 

 

5.方法覆盖定义及原则

方法覆盖的定义

子类可以重写父类中某一个方法,称为方法覆盖,也称方法重写,是继承中非常重要的知识点。如果子类需要修改从父类继承到的方法的方法体,就可以使用方法覆盖。

方法覆盖的原则

同名

同参

同返回值

6.访问权限不能缩小

final修饰符

final修饰属性、局部变量,值不能被修改

final修饰类,不能被继承

final修饰方法,不能被子类覆盖

 

[root@hadoop01 jars]# hadoop jar film.jar CleanDriver /film/input /film/outputs/cleandata 25/04/02 17:25:34 INFO client.RMProxy: Connecting to ResourceManager at hadoop01/192.168.20.20:8032 25/04/02 17:25:35 WARN mapreduce.JobResourceUploader: Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this. 25/04/02 17:25:35 INFO input.FileInputFormat: Total input paths to process : 2 25/04/02 17:25:35 INFO mapreduce.JobSubmitter: number of splits:2 25/04/02 17:25:35 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1743583799083_0005 25/04/02 17:25:35 INFO impl.YarnClientImpl: Submitted application application_1743583799083_0005 25/04/02 17:25:35 INFO mapreduce.Job: The url to track the job: http://hadoop01:8088/proxy/application_1743583799083_0005/ 25/04/02 17:25:35 INFO mapreduce.Job: Running job: job_1743583799083_0005 25/04/02 17:25:41 INFO mapreduce.Job: Job job_1743583799083_0005 running in uber mode : false 25/04/02 17:25:41 INFO mapreduce.Job: map 0% reduce 0% 25/04/02 17:25:49 INFO mapreduce.Job: map 100% reduce 0% 25/04/02 17:25:55 INFO mapreduce.Job: map 100% reduce 17% 25/04/02 17:26:01 INFO mapreduce.Job: map 100% reduce 33% 25/04/02 17:26:04 INFO mapreduce.Job: map 100% reduce 50% 25/04/02 17:26:05 INFO mapreduce.Job: map 100% reduce 67% 25/04/02 17:26:06 INFO mapreduce.Job: map 100% reduce 100% 25/04/02 17:26:06 INFO mapreduce.Job: Job job_1743583799083_0005 completed successfully 25/04/02 17:26:06 INFO mapreduce.Job: Counters: 50 File System Counters FILE: Number of bytes read=36 FILE: Number of bytes written=982026 FILE: Number of read operations=0 FILE: Number of large read operations=0 FILE: Number of write operations=0 HDFS: Number of bytes read=17347 HDFS: Number of bytes written=0 HDFS: Number of read operations=24 HDFS: Number of large read operations=0 HDFS: Number of write operations=12 Job Counters Killed reduce tasks=1 Launched map tasks=2 Launched reduce tasks=6 Data-local map tasks=2 Total time spent by all maps in occupied slots (ms)=9878 Total time spent by all reduces in occupied slots (ms)=55847 Total time spent by all map tasks (ms)=9878 Total time spent by all reduce tasks (ms)=55847 Total vcore-milliseconds taken by all map tasks=9878 Total vcore-milliseconds taken by all reduce tasks=55847 Total megabyte-milliseconds taken by all map tasks=10115072 Total megabyte-milliseconds taken by all reduce tasks=57187328 Map-Reduce Framework Map input records=144 Map output records=0 Map output bytes=0 Map output materialized bytes=72 Input split bytes=219 Combine input records=0 Combine output records=0 Reduce input groups=0 Reduce shuffle bytes=72 Reduce input records=0 Reduce output records=0 Spilled Records=0 Shuffled Maps =12 Failed Shuffles=0 Merged Map outputs=12 GC time elapsed (ms)=535 CPU time spent (ms)=2820 Physical memory (bytes) snapshot=1039224832 Virtual memory (bytes) snapshot=16491360256 Total committed heap usage (bytes)=453517312 Shuffle Errors BAD_ID=0 CONNECTION=0 IO_ERROR=0 WRONG_LENGTH=0 WRONG_MAP=0 WRONG_REDUCE=0 File Input Format Counters Bytes Read=17128 File Output Format Counters Bytes Written=0
04-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值