[Java] 继承,隐藏,覆盖,重载,多态,抽象类,接口
1.子类
class SonClass extends ABC{...}
在子类定义后,子类中就可以直接隐式包含父类的成员变量和方法,而不用再写,这就是使用继承的优点。
子类包含父类的成员,不是子类和父类共享成员,而是子类和父类中都能各自开辟空间,产生性质相同但又独立的成员变量和方法。
1.1子类的构造方法
Java中,在子类创造对象时会执行子类的构造方法,因为子类继承自父类,所以在子类构造方法之前必须先执行父类的构造方法。
eg:
Public class Example{
public static void main(String[] args){
SonClass sc = new SonClass();
}
}
class SuperClass{
SuperClass(){
System.out.print("Supper");
}
}
class SonClass extends SuperClass{
SonClass(){
System.out.print("SubClass");
}
}
output:
Supper
SubClass
子类中构造方法是隐式调用父类构造方法。在程序中也可以显式调用父类构造方法。显示调用父类的构造方法是通过语句super()来完成。如果要调用父类的有参构造方法,则在super()的圆括号中加入所需的参数。
当在子类的构造方法中通过super()来调用父类的构造方法时,如果父类构造方法不带参数,则这样的显示调用可以省略,这种调用是由Java自动进行的。但是,如果父类中只有一个或多个有参构造方法,则程序找不到默认无参方法,默认调用会导致编译出错,必须显式调用
eg:
Public class Example{
public static void main(String[] args){
SonClass sc = new SonClass();
}
}
class SuperClass{
SuperClass(int a, int b){
System.out.print(a+b);
}
}
class SonClass extends SuperClass{
SonClass(){
System.out.print("SubClass");
}
}
应将程序修改为:
class SonClass extends SuperClass{
SonClass(){
super(1, 2);
System.out.print("SubClass");
}
}
2.多态
2.1隐藏
隐藏发生在子类与父类的成员变量发生冲突时。当子类中的成员变量与父类成员变量同名时,子类就会把父类的变量隐藏起来,这时该变量默认为子类的成员变量。如需强制使用父类成员变量,可以使用super关键字,如super.i等。
eg:
public class Example{
public static void main(String[] args){
SonClass sc = new SonClass();
System.out.println(sc.k); //子类本身定义的k
}
}
class SuperClass{
int k = 3;
}
class SonClass extends SuperClass{
int k = super.k * 2; //子类隐藏父类的成员k,调用时需要用super
}
2.2重载与覆盖
当子类中有2个out方法,一个继承自父类,一个由自己创建。两个方法的参数不同,这种情况就属于重载
eg:
public class Example{
public static void main(String[] args){
SonClass sc = new SonClass();
sc.out();
sc.out(3);
}
}
class SuperClass{
public void out(){
System.out.print("SupperClass");
}
}
class SonClass extends SuperClass{
public void out(int i){
System.out.print("SupperClass" + i);
}
}
当子类中的成员方法与父类中的成员方法同名同参数时,出现覆盖,子类中的成员方法会屏蔽继承自父类的成员方法
eg:
public class Example{
public static void main(String[] args){
SonClass sc = new SonClass();
sc.out(); //调用子类本身的方法,而不是父类的out 方法
}
}
class SuperClass{
public void out(){
System.out.print("SupperClass");
}
}
class SonClass extends SuperClass{
public void out(){
System.out.print("SonClass");
}
}
构造方法不能被覆盖,也不能继承。父类构造方法必须在子类构造方法中调用。如果想强制使用父类的构造方法,可以使用super 关键字。
若程序在需要显式调用父类构造方法二使用super()语句时,super()必须是构造方法中定义的第一条语句;若没有,则系统调用默认的super()语句。
eg:
public class Example{
public static void main(String[] args){
SonClass sc = new SonClass();
}
}
class SuperClass{
SuperClass(int i){
System.out.print("SupperClass");
}
}
class SonClass extends SuperClass{
SonClass(){
super(1);
System.out.print("SonClass");
}
}
3.抽象类
abstract 所修饰的类为抽象类。抽象类是只有定义而无法实现对象的类。抽象类无法产生对象。
abstract 所修饰的方法为抽象方法。抽象方法在形式上仅有方法的方法头部分,而没有方法体,方法头后面有分号,例如:
abstract void();
抽象类中可以没有抽象方法,但抽象方法所在的类必须是抽象类
在写大型程序时,一般先设计最顶层、最抽象的类和方法,然后逐步实现细节化的类和方法。这种设计方法由粗到细,容易分析和理解
4.接口
我们在分析问题时,往往遇到有的类既要继承自一个父类,又需要继承自另一个父类。而Java不允许多重继承。为此,Java 中定义了一种特殊类型的类,称之为接口。接口实质上是一种特殊的抽象类。接口中的常量默认为public static final 类型
interface 接口名{
//类体:只能由静态常量或抽象方法组成
}
eg:
interface infa{
double PI = 3.14;
abstract void out();
}
子接口继承父接口是通过关键字extends 来声明的,
eg:
interface 子接口 extends 父接口1,父接口2,...
在Java 中,要让接口发挥其功能,需定义一个子类,实现并覆盖掉接口中的所有抽象方法,这称之为接口的实现。实现接口是通过关键字 implements 来声明的
eg:
class SonClass implements infa{
public void out(){
System.out.print(PI);
}
}
[Java] 继承,隐藏,覆盖,重载,多态,抽象类,接口的更多相关文章
- Java中关于继承、类、多态、接口的知识点
继承 含义:在面向对象编程中,可以通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类 优点:1)代码的重用性:2)子类扩展父类的属性和方法:3)父类的属性和方法可用于子类:4)设计应用程序 ...
- 【Java基础】【09面向对象_多态&抽象类&接口】
09.01_面向对象(多态的概述及其代码体现) A:多态(polymorphic)概述 事物存在的多种形态 B:多态前提 a:要有继承关系. b:要有方法重写. c:要有父类引用指向子类对象. C:案 ...
- java基础三 [深入多态,接口和多态](阅读Head First Java记录)
抽象类和抽象方法 1.抽象类的声明方法,在前面加上抽象类的关键词abstract abstract class canine extends animal{ public void roam ...
- 06 面向对象:多态&抽象类&接口&权限修饰符&内部类
多态: /* 多态(polymorphic)概述 * 事物存在的多种形态 多态前提 * a:要有继承关系. * b:要有方法重写. * c:要有父类引用指向子类对象. * 成员变量 * 编译看左边(父 ...
- Java 继承Thread类和实现Runnable接口的区别
ava中线程的创建有两种方式: 1. 通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2. 通过实现Runnable接口,实例化Thread类 在实际应用中,我 ...
- 六、java基础-单例模式_继承_覆盖_多态
1.单例模式: 1)提出原因 是由gof 也就是四人组提出来的.为了保证jvm中某一类型的java对象永远只有一个,同时也是为了节省内存的开销.因为外面程序可以通过new的方法直接调用类里面的构造方法 ...
- JAVA基础知识总结7(抽象类 | 接口)
抽象类: abstract 1.抽象:不具体,看不明白.抽象类表象体现. 2.在不断抽取过程中,将共性内容中的方法声明抽取,但是方法不一样,没有抽取,这时抽取到的方法,并不具体,需要被指定关键字abs ...
- Java 继承(extends)、抽象类(abstract)的特点用法原理(7)
Java 中的继承 继承: java中的抽象类用法原理: /* 当多个类中出现相同功能,但是功能主体不同, 这是可以进行向上抽取.这时,只抽取功能定义,而不抽取功能主体. 抽象:看不懂. 抽象类的特 ...
- PHP中多态,抽象类,接口,
小例子: 需求:公司定义一个接口让我们开发功能 usb.interface.php: <?php interface USB{ public function run(); } store.cl ...
- java继承方法覆盖
public class TestB { private void f() { System.out.println("TestB"); } public static void ...
随机推荐
- android 完美退出应用程序。
Android 程序在点击回退键时,如果只有一个activity,调用finish()方法就能退出界面,如果有多个界面,在调用该方法时,只会销毁当前的activity,显示栈顶的其它activity, ...
- android之总结(一)——原
1,TextView 中实现跑马灯,需求:文字左边留置一段空白,不需要紧靠在左边:设置android:padding android:padding和android:layout_margin这个地方 ...
- 最短路中部分点只能从中任意选取K个问题
题意:给N个点,还有另外m个点(其中只能选K个),求最短路. 思路:在SPFA的基础上,用一个数组来统计,在某点入队时(要拓展其他点了),若该点是m个点中的,则count[i]=原来的+1:若不是,则 ...
- P1576 最小花费 洛谷
https://www.luogu.org/problem/show?pid=1576 题目背景 题目描述 在n个人中,某些人的银行账号之间可以互相转账.这些人之间转账的手续费各不相同.给定这些人之间 ...
- Centos7安装完成后一些小优化
1.修改ip地址.网关.主机名.DNS等 [root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 #网 ...
- mysql 密碼忘記 解決
WINDOW 1.my.ini 加入 [mysqld] skip-grant-tables 2.mysql -uroot -p 登入 USE MYSQL: update user set passwo ...
- Go语言并发之美
简介 多核处理器越来越普及,那有没有一种简单的办法,能够让我们写的软件释放多核的威力?答案是:Yes.随着Golang, Erlang, Scale等为并发设计的程序语言的兴起,新 ...
- iOS App 项目:会员卡管理系统设计方案
1.需求描写叙述 店主须要管理自己的会员信息和充值卡信息以及消费纪录 店主觉得购买电脑和外设成本太高,并且店面没有地方容纳这些设备 店主希望通过手机来完毕这些功能.但尽量不产生流量.对网络要求较低 店 ...
- 第三讲_图像特征与描述Image Feature Descriptor
第三讲_图像特征与描述Image Feature Descriptor 概要 特征提取方法 直方图 对图片数据/特征分布的一种统计:对不同量进行直方图统计:可以表示灰度,颜色,梯度,边缘,形状,纹理, ...
- 碰撞检測之OBB-OBB的SweepTest
提要 当物体在运动的时候.普通的每帧进行碰撞检測已经无法满足要求,比方子弹的运动 两帧的位置已经直接将中间的板子穿过了,所以 t 时刻和 t +1 时刻的检測都是失效的.这时候须要用到的就是sweep ...