java语言中的 继承_Java语言有关继承的总结

一、继承

1、继承的概念

继承机制是面向对向程序设计不可缺少的关键概念,是实现软件可重用的根基,是提高软件系统的可扩张性与可维护性的主要途径。(它允许创建分等级层次的类)。

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

2、继承形式

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

public class Father {

public void draw(){

}

}

public class Son extends Father{

public double getDiameter(){

return 0.0;

}

}

3、继承的作用:代码的复用

public class Father {--------------父类

public void draw(){

}

}

public class Son extends Father{------------------子类

public double getDiameter(){

return 0.0;

}

}

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

Son s = new Son();

son.draw();

4、继承的特性

子类拥有父类非private的属性,方法;

子类可以拥有自己的属性和方法,即子类可以对父类进行扩展

子类可以用自己的方式实现父类的方法

extends的继承是单继承的,就是一个子类只能继承一个父类

二、构造方法与继承

1、继承中构造方法的调用

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

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

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

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

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

3、子类构造方法的执行详解

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

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

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

4、继承中累的属性

在子类中,若没定义属性则继承父类属性;若定义属性没赋值则被重写为默认值0.

三、this 关键词

1、this关键字的用途

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

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

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

a.直接使用this

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

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

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

2、this引用成员变量

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

public class Company{

private int a;

public Company (int a){

this.a = a;

}

public int getA(){

return a;

}

public void setA(int a){

this.a = a;

}

3、this引用构造方法

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

public class Company{

int a;

public Company(){

this(0);

}

public Company(int a){

this.a = a;

}

}

4、this引用成员方法

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

public class Company{

Company instance;

public void sell(){

System.out.println("sellSoft");

}

public void doSell(){

this.sell();

}

}

5、this代表自身对象

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

pubilc class Company{

Company instance;

public Company(){

instance = this ;

}

public void test(){

System.out.println(this);

}

}

四、super关键字

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

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

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

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

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

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

在子类构造方法中要调用父类的构造方法,需要注意: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();

}

}

3、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();

}.

}

4、this和super

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

五、方法覆盖(重写)

1、方法覆盖的定义

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

2、方法覆盖的原则

同名、同参、同返回值、访问权限不能缩小。

重载再总结:同方法名、参数类型不同(数量,顺序,类型)、与返回值无关。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/405999.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[转]ssh常用用法小结

ssh常用用法小结 1、连接到远程主机: 命令格式 : ssh nameremoteserver 或者 ssh remoteserver -l name 说明:以上两种方式都可以远程登录到远程主机,server代表远程主机,name为登录远程主机的用户名。 2、连接到远程主…

正则基础之——反向引用

From: http://blog.csdn.net/lxcnn/article/details/4476746 1 概述 捕获组捕获到的内容,不仅可以在正则表达式外部通过程序进行引用,也可以在正则表达式内部进行引用,这种引用方式就是反向引用。要了解反向引用,首先要了…

Android教程之android平台水波效果!提供源码!

基于Android平台实现的水波效果,提供源码,,效果图如下:

java文件全是数字编码_批量将Java源代码文件的编码从GBK转为UTF-8

最近在做一个项目,需要从以前的另外一个项目迁移大量源代码过来,但是由于另一个项目采用GBK编码格式,而新项目采用的UTF-8编码格式,如果直接把Java源代码复制到Eclipse中所有的中文信息都出现乱码。将文本文件的编码格式从GBK转UT…

对于 IE低版本不兼容问题的处理

坑爹的IE低版本浏览器总是需要我们去编写特殊的代码才可以,脑残的我之前总是编写一套CSS,让页面在Firefox、Chorme等牛逼闪闪的浏览器与IE这SB浏览器中的显示差不多,差不多,谁懂么,好好的网页改得真是让人心塞&#xf…

vim中正则表达式匹配单词边界

一般的高级语言中匹配单词边界用的是"\b"&#xff0c;匹配非单词边界用"\B"。 但是在vim中使用\b&#xff0c;发现不认识。上网搜索了一番&#xff0c;终于找到了&#xff1a; 匹配单词左边界&#xff1a;\< 匹配单词右边界&#xff1a;\> 至于匹…

C++对象内存布局--④VS编译器--单个虚拟继承

C对象内存布局--④VS编译器--单个虚拟继承 在VS2005编译器下&#xff0c;证明单个虚拟继承的内存布局&#xff1a;无论有无虚函数&#xff0c;必然含有虚基类表指针。虚基类表中的内容为本类实例的偏移和基类实例的相对偏移值。 如果有虚函数&#xff0c;那么基类的虚函数表跟派…

mysql 存取字符集_MySQL字符集设置—MySQL数据库乱码问题详解

MySQL(4.1以后版本) 服务器中有六个关键位置使用了字符集的概念&#xff0c;他们是&#xff1a;client 、connection、database、results、server 、system。MySQL有两个字符集概念&#xff1a;一个就是字符集本身&#xff0c;一个是字符集校验规则。字符集影响数据在传输和存储…

Eclipse --Type /com.xx.app/gen already exists but is not a source folde解决方案

两种解决方案&#xff1a;Two actions, first:1.Right click on the project and go to "Properties" 2.Select "Java Build Path" on the left 3.Open "Source" tab 4.Click "Add Folder..." and check "gen" and "sr…

浮点数表示及其实现

From: http://blog.csdn.net/biblereader/article/details/819428 我两年前就知道不应该用号来判断浮点数的相等了,因为存在一个精度的问题,但是一直以来,都没怎么在乎这些东西,而实际上,我对于浮点数的结构,虽然了解,但并不清晰. 作为一个C爱好者,应该尽量搞清楚每一个问题,所…

利用HttpSessionListener实现网站在线人数统计功能

为什么80%的码农都做不了架构师&#xff1f;>>> 在网站中经常需要进行在线人数的统计。过去的一般做法是结合登录和退出功能&#xff0c;即当用户输入用户名密码进行登录的时候计数器加1&#xff0c;然后当用户点击退出按钮退出系统的时候计数器减1。这种处理方式存…

java中退订程序怎么写_如何在RxJava中的自定义Observable中获得观察者的退订操作的通知...

订阅者抽象类实际上有一个方法add,可以添加将取消订阅订阅的订阅.def myObservable Observable.create({ aSubscriber ->val listener {event ->aSubscriber.onNext(event);}existingEventSource.addListener(listener)// Adds a lambda to be executed when the Subsc…

UITableViewCell在非Nib及Cell重用下设置CellStyle

在UITableViewController&#xff08;实现了UITableViewDataSource&#xff09;下需要实现 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; 此接口就是使用数据初始化一个Cell视图并返回&#xff0c;我们可以每次创…

深入react技术栈(9):表单

我是歌谣 放弃很容易 但是坚持一定很酷 微信公众号搜索前端小歌谣 获取前端知识 应用表单组件 文本框 单选按钮和复选框 Select组件 文章参考深入react技术栈

更新

好久没有更新. 已经于去年年底通过CRM的认证&#xff0c;版本是2007&#xff08;6.0&#xff09;&#xff0c; 现在的最新版本已经是CRM7.0&#xff0c;不过差别不是很大的。 感觉7.0的功能更细致&#xff0c;和2007一样&#xff0c;用户的界面是Web Client UI.转载于:https://…

sscanf与正则表达式

From: http://www.cnblogs.com/gussing/archive/2009/02/02/1382342.html 今天翻google reader的时候看到这样一篇文章&#xff0c;介绍的是sscanf的高级用法。直到今天我才知道sscanf是可以直接用正则表达式的&#xff0c;惭愧。 在msdn中sscanf的声明如下 int sscanf( const…