Java中继承、this关键字、super关键字

继承:

概述:当多个类中存在相同属性和行为时,将这些相同的内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承抽离出来的这个类即可。

子类:当某个类继承了另一个类的时候,可以把这个某类称为子类。

父类:当某个类被继承时,这个被继承的类可以称为父类(也称为超类或基类)。

定义:子类继承父类的属性或行为,使得子类对象具有父类的相同的属性或行为,子类可以直接访问父类中的私有属性和行为。

继承的优点:代码重复利用;类与类存在关系,是多态的前提。

// 1.定义一个父类:FatherClass类:定义父类跟定义普通的类没有任何区别,如:
public class FatherClass{// 定义父类中的方法和属性:String FatherStr1 = "这是FatherClass父类中的FatherStr1";public static void FatherMethods(){System.out.println("父类FacherClass中的FatherMethods方法执行了");}// 定义与子类重名的属性和方法:String SameProp = "这是父类中:子类和父类中重名都有的属性SameProp";public static void SameMethods(){System.out.println("这是父类中:子类和父类中重名都有的方法SameMethods");};// 6-2:通过方法访问成员变量或成员方法的情况:public void msf(){System.out.println(SameProp);//这是父类中:子类和父类中重名都有的属性SameProp   SameMethods();//这是父类中:子类和父类中重名都有的方法SameMethods// 访问子类中不同名的属性或方法:// System.out.println(name2);//FatherClass.java:22: 错误: 找不到符号:System.out.println(name2)中name2;// method2();//错误: 找不到符号:method2()中method2;}// 定义不同名属性和方法供子类mss方法访问:String name1 = "父类中name1";public static void method1(){System.out.println("父类中的method1");}// 7-2:当局部变量和子类中成员变量及父类中成员变量同时重名时的访问规则:String threeSameStrs = "父类中的threeSameStrs";
}
// 2.定义一个继承了FatherClass类的子类SonClass:子类的定义需要使用关键字:extends,如:
public class SonClass extends FatherClass{//定义子类的基本格式:public class 子类名 extends 父类名{}// 定义子类中的方法和属性:String SonStr1 = "这是子类SonClass中的SonStr1";public static void SonMethods(){System.out.println("子类SonClass中的SonMethods方法执行了");}   // 定义与父类重名的属性和方法:String SameProp = "这是子类中:子类和父类中重名都有的属性SameProp";public static void SameMethods(){System.out.println("这是子类中:子类和父类中重名都有的方法SameMethods");};// 6-2:通过方法访问成员变量或成员方法的情况:public void mss(){System.out.println(SameProp);//这是子类中:子类和父类中重名都有的属性SameProp SameMethods();//这是子类中:子类和父类中重名都有的方法SameMethods// 访问父类中不同名的属性或方法:System.out.println(name1);//父类中name1method1();//父类中的method1}// 定义不同名属性和方法供父类msf方法访问:String name2 = "子类中name2";public static void method2(){System.out.println("子类中的method2");}// 7-1:当局部变量和子类中成员变量及父类中成员变量同时重名时的访问规则:String threeSameStrs = "子类中的threeSameStrs";public void threeSameStr(){String threeSameStrs = "局部变量中的threeSameStrs"; System.out.println(threeSameStrs);//局部变量中的threeSameStrsSystem.out.println(this.threeSameStrs);//子类中的threeSameStrsSystem.out.println(super.threeSameStrs);//父类中的threeSameStrs// 访问局部变量直接写,访问本类中变量通过this.变量名,访问父类中的变量通过super.变量名;}
}
// 3.定义一个TestSonObj类,用于测试继承关系中子类访问父类中的属性或方法:
public class TestSonObj{public static void main(String[] args){// 4-1:使用子类SonClass类创建一个对象:sonObj,如:SonClass sonObj = new SonClass();// 4-2:通过子类SonClass定义的sonObj对象调用父类FatherClass中的成员变量和方法,如:System.out.println(sonObj.FatherStr1);//这是FatherClass父类中的FatherStr1sonObj.FatherMethods();//父类FacherClass中的FatherMethods方法执行了//虽然子类中没有定义以上两个方法和变量,但是通过继承可以将父类中的属性或行为继承到子类中,子类可以定义多个来继承父类,这样可以节省很多公共代码。// 4-3:访问子类和父类重名的属性和方法:// 直接通过.的方式访问:System.out.println(sonObj.SameProp);//这是子类中:子类和父类中重名都有的属性SamePropsonObj.SameMethods();//这是子类中:子类和父类中重名都有的方法SameMethods// 创建一个FatherClass类对象:fo,用来测试重名属性和方法:FatherClass fo = new FatherClass();System.out.println(fo.SameProp);//这是父类中:子类和父类中重名都有的属性SamePropfo.SameMethods();//这是父类中:子类和父类中重名都有的方法SameMethods// 对于子类和父类中重名的属性和方法直接通过对象.点出属性或方法时,点.左边对象是用谁创建的就用(访问)谁的重名方法或属性;//间接通过方法访问成员变量或成员方法的情况:sonObj.mss();// 对于子类和父类中重名的属性或方法通过方法间接访问时,各自访问的是自己本身的属性或方法;// 对于子类和父类中不重名且本类中没有的属性或方法通过方法间接访问时,子类会向父类中查找,没有则会报错,而对于父类而言,不会像子类查找,本类没有则直接报错;// 7-3:当局部变量和子类中成员变量及父类中成员变量同时重名时的访问规则:sonObj.threeSameStr();// 访问局部变量直接写,访问本类中变量通过this.变量名,访问父类中的变量通过super.变量名;}
}
// 5.定义一个TestFatherObj类,用于测试继承关系中是否有父类访问子类中的属性或方法的关系:
public class TestFatherObj{public static void main(String[] args){// 6-1:使用父类FatherClass类创建一个fatherObj对象:FatherClass fatherObj = new FatherClass();// System.out.println(fatherObj.SonStr1);//TestFatherObj.java:5: 错误: 找不到符号:System.out.println(fatherObj.SonStr1)中SonStr1;// fatherObj.SonMethods();//TestFatherObj.java:7: 错误: 找不到符号:fatherObj.SonMethods()中的SonMethods;// 父类是无法访问子类中的属性和方法的,也就是说继承中没有父类访问子类中的属性或方法的关系。// 6-2:访问子类和父类重名的属性和方法:// 直接通过点访问属性或方法的情况:System.out.println(fatherObj.SameProp);//这是父类中:子类和父类中重名都有的属性SamePropfatherObj.SameMethods();//这是父类中:子类和父类中重名都有的方法SameMethods// 创建一个SonClass类对象:so,用来测试重名属性和方法:SonClass so = new SonClass();System.out.println(so.SameProp);//这是子类中:子类和父类中重名都有的属性SamePropso.SameMethods();//这是子类中:子类和父类中重名都有的方法SameMethods// 对于子类和父类中重名的属性和方法直接通过对象.点出属性或方法时,点.左边对象是用谁创建的就用(访问)谁的重名方法或属性;//间接通过方法访问成员变量或成员方法的情况:fatherObj.msf();// 对于子类和父类中重名的属性或方法通过方法间接访问时,各自访问的是自己本身的属性或方法;// 对于子类和父类中不重名且本类中没有的属性或方法通过方法间接访问时,子类会向父类中查找,没有则会报错,而对于父类而言,不会像子类查找,本类没有则直接报错;}
}

成员方法重写:

子类和父类中出现重名且方法参数一致的成员方法时,这种情况称为方法重写,也叫方法覆盖,方法覆写;与方法重载需区别,重载是方法名相同,但是方法参数列表不同。

注解:@Override

@Override用于检测是否存在方法重写,其使用规则为:在定义方法时在public上一行直接写@Override,注意,后面不能跟标点符号。

public class OverrideFather{public void overRideMethod(){System.out.println("父类中的overRideMethod方法");}// 1-1:方法重写中:子类的返回值的范围一定要小于等于父类返回值范围,如:public Object messages(){return "123";}// 2-1:子类方法的权限修饰符必须大于父类方法的权限修饰符,权限修饰符权限大写:public > protected > (default,留空什么也不写) > privateObject say(){return "hello";}
}
public class OverrideSon extends OverrideFather{@Overridepublic void overRideMethod(){super.overRideMethod();//父类中的overRideMethod方法System.out.println("子类中的overRideMethod方法");//子类中的overRideMethod方法}// 1-2:方法重写中:子类的返回值的范围一定要小于等于父类返回值范围,如:public String messages(){return "123456";}// 2-1:子类方法的权限修饰符必须大于父类方法的权限修饰符,权限修饰符权限大写:public > protected > (default,留空什么也不写) > privatepublic Object say(){return "hello123";}// 3.子类的构造方法中会默认调用父类的无参构造方法,其是用super()调用;// 继承关系中,父子类构造方法的访问特点:// 3-1: 子类构造方法当中有一个默认隐含的“super()”调用,所以一定是先调用的父类构造,后执行的子类构造。// 3-2: 子类构造可以通过super关键字来调用父类重载构造。// 3-3: super的父类构造调用,必须是子类构造方法的第一个语句。不能一个子类构造调用多次super构造。// 子类必须调用父类构造方法,不写则赠送super();写了则用写的指定的super调用,super只能有一个,还必须是第一个。public OverrideSon(){//子类构造方法:super();//子类无参构造器中默认会调用父类无参构造方法,super()调用必须是第一个语句,如果构造方法自己写了,那么一定要记得调用父类的构造方法:使用super()调用即可。}/*总结:super关键字的用法有三种:1. 在子类的成员方法中,访问父类的成员变量:super.变量名2. 在子类的成员方法中,访问父类的成员方法:super.方法名()3. 在子类的构造方法中,访问父类的构造方法:super()*/// 4.this关键字:用来访问本类中的内容,用法有三种:// 4-1:在本类的成员方法中访问本类的成员变量:String strthis = "123456";public void testThis(){String strthis = "123";System.out.println(strthis);//123,访问的为局部变量System.out.println(this.strthis);//123456,访问的为成员变量} // 4-2:在本类的成员方法中访问另一个成员方法,如:this.methods(),这种方式只是起强调作用,直接通过方法名()也可以调用:methods();// 4-2:在本类的构造方法中访问另一构造方法,如:public OverrideSon(){this(String hello);//在本类中的无参构造方法中调用了有参构造方法,这里也必须是构造方法中的第一语句,因此它们不能同时使用。}public OverrideSon(String str){};
}
public class OverrideSonObj{public static void main(String[] args){OverrideSon orobj = new OverrideSon();orobj.overRideMethod();System.out.println(orobj.messages());//123456System.out.println(orobj.say());//hello123// 覆盖重写常用于对老的类的更新,但是并非更新原文件,而是通过继承和方法重写,重新写一个类。}
}

java语言继承的特点:

1.java语言是单继承的:父类只能有一个(只能继承一个类),但是可以多级继承(继承一个继承了某类的类)。

2.一个类可以被多个类继承。

提示:本文图片等素材来源于网络,若有侵权,请发邮件至邮箱:810665436@qq.com联系笔者删除。
笔者:苦海

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

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

相关文章

java中抽象类,abstract关键字

抽象类:java语法规定,包含抽象方法的类为抽象类。 abstract关键字:abstract用来定义抽象方法和抽象类,定义抽象方法格式为:abstract修饰方法,并去掉大括号,直接以封号结束;定义抽象…

c++获取当前时间戳_python开发:python时间模块的使用

前言:今天元宵节,祝福大家元宵节快乐。今天在元宵节给各位朋友分享一下python时间模块。我们在开发中经常会与时间打交道,如:获取事件戳,时间戳的格式化等,这里简要记录一下python操作时间的方法。ython中常…

Linux重新编译内核指南

Linux的一个重要的特点就是其源代码的公开性,全世界任何一个软件工程师都可以将自己认为优秀的代码加入到其中,由此引发的一个明显的好处就是Linux修补漏洞的快速以及对最新软件技术的利用。而Linux的内核则是这些特点的最直接的代表。      为什么…

python 获取向上两级路径_Python学习第171课--相对路径和绝对路径

【每天几分钟,从零入门python编程的世界!】这节我们补充2个概念:相对路径和绝对路径。●绝对路径就像一棵大树一样,从它的根开始,往上会有大的枝干,在大的枝干上面又会有小一点的树枝,小树枝上面…

Java接口、implements关键字、接口中抽象方法,默认方法,静态方法,私有方法,常量、final关键字

接口: 接口是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么 接口的内部主要就是封装了方法,包含抽象方法(JDK 7及以前),默认方法和…

百度热力图颜色说明_大数据下的龙港、鳌江人口热力图

大数据下的龙港、鳌江人口热力图--趋势显示,人口逐步集中于区域中心地区与城市 2020-08-25 大数据(big data),是指无法在一定时间内用常规软件工具对其内容进行抓取、管理和处理的数据集合。大数据有五大特点,即大量(Volume)、高速(Velocity)…

python 显示图片matplotlib_Python OpenCV ——Matplotlib显示图片

Color image loaded by OpenCV is in BGR mode.But Matplotlib displays in RGB mode.So color images will not be displayed correctly in Matplotlib if image is read with OpenCV.Please see the exercises for more details.(引自文档)import numpy as npimport cv2from …

什么是Spring?Spring是什么?

Spring概述: Spring是一个开源框架,是为了解决企业应用程序开发复杂性而开发的。 从简单性、可測试性和松耦合的角度而言,不论什么java应用都能够从Spring中受益。 简而言之,Spring就是一个轻量级的控制反转(IOC&#…

java中多态,instanceof关键字

多态: 面向对象三大特征:继承、封装、多态,其中多态指的是有多种形态,可以使代码更加灵活,而非状态。继承或接口是多态的前提,比如一个对象狗是宠物类的实现类对象,而宠物类又继承了动物类&…

python语言的单行注释以井号开头_【学习】Python语言入门

Python是一门具有强类型(即变量类型是强制要求的)、动态性、隐式类型(不需要做变量声明)、大小写敏感(var和VAR代表了不同的变量)以及面向对象(一切皆为对象)等特点的编程语言。 语法 Python中没有强制的语句终止字符,且代码块是通过缩进来指示的。缩进表示一个代码…

python 参数个数 同名函数_Python——函数的参数

函数的参数定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了。对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,…

webview的

问题描述我给WEBVIEW加了等待的圆圈,怎么不起作用?布局文件:<?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:orientation"vertical"android:lay…

java中final关键字、权限修饰符、内部类(成员内部类、局部内部类、匿名内部类)

final关键字&#xff1a; final表示最终的不可变的&#xff0c;在java中可以用来修饰类或方法、局部变量、成员变量。 // 1.final关键字修饰类需要放在class关键字前面&#xff0c;表示不可变的类&#xff0c;需要注意&#xff0c;这里表示当前类不能有子类&#xff0c;但是有…

python安装后无法使用_Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)...

在终端通过pip装好包以后&#xff0c;在pycharm中导入包时&#xff0c;依然会报错。新手不知道具体原因是什么&#xff0c;我把我的解决过程发出来&#xff0c;主要原因就是pip把包安装到了“解释器1”&#xff0c;但我们项目使用的是“解释器2”。我们新手怕字多&#xff0c;所…

03-sizeof的用法

1、作用 sizeof运算符是C语言特有的运算符。 用来计算一个变量或者一个常量、一种数据类型在内存中所占的字节数。 2、基本形式 (1) sizeof (变量或常量) (2) sizeof 变量或常量 (3) sizeof(数据类型) (4) 不能是sizeof 数据类型, 即计算数据类型的字节数必须用小括号括起来 实…

java中类作为成员变量类型使用、接口作为成员变量类型使用、接口作为方法的参数或返回值使用

类作为成员变量类型使用&#xff1a; 自定义的类也可以作为成员变量使用&#xff0c;如&#xff1a; // 1.创建一个电脑角色的类&#xff1a; public class Computer{private String computername;//定义电脑名称&#xff0c;String类型底层实际就是一个类&#xff0c;是java…

python django restful框架_python+django+rest框架配置创建方法

安装好所需要的插件和包&#xff1a;python、django、pip等版本如下&#xff1a;采用Django REST框架3.01、在python文件夹下D:\python\Lib\site-packages\django\bin打开cmd命令工具,本人将python文件夹名字改为了wwj,请注意:mkdir tutorialcd tutorialvirtualenv envsource e…

a标签获取input值_HTML5常用标签

一.HTML文档标签<!DOCTYPE>: 定义文档类型.<html>: 定义HTML文档.<head>: 定义文档的头部.(头部内包含)(1). <meta>: 定义元素可提供有关页面的元信息&#xff0c;比如针对搜索引擎和更新频度的描述和关键词. (2). <base>:定义页面上的所有链接规…

【Python3】POP3协议收邮件

初学Python3&#xff0c;做一个email的例子&#xff0c;虽然知道做的很渣渣&#xff0c;还是分享一下吧POP3协议POP3全称Post Official Protocol3&#xff0c;即邮局协议的第三个版本&#xff0c;它规定了怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议&…

发红包案例(RedPacketFrame简介)

发红包案例&#xff1a; 案例目录结构如下&#xff08;red包为第三方包&#xff0c;需要的话可以到网上自行下载或私信我邮箱即可&#xff09;&#xff1a; // 1.这里将借用发红包的框架&#xff1a;RedPacketFrame&#xff08;图形界面化&#xff09;&#xff0c;OpenMode处…