Java 中extends与implements使用方法
初学Java语言, 代码中的extends和implements让我感到很迷惑,现在终于弄明白它们之间的区别和用法了。
- //定义一个Runner接口
- public inerface Runner
- {
- int ID = 1;
- void run ();
- }
- //定义一个interface Animal,它继承于父类Runner
- interface Animal extends Runner
- {
- void breathe ();
- }
- //定义Fish类,它实现了Animal接口的方法run()和breather()
- class Fish implements Animal
- {
- public void run () //实现了Animal方法run()
- {
- System.out.println("fish is swimming");
- }
- public void breather()
- {
- System.out.println("fish is bubbing");
- }
- }
- //定义了一个抽象类LandAnimal,它实现了接口Animal的方法。
- abstract LandAnimal implements Animal
- {
- public void breather ()
- {
- System.out.println("LandAnimal is breathing");
- }
- }
- //定义了一个类Student,它继承了类Person,并实现了Runner接口的方法run()。
- class Student extends Person implements Runner
- {
- ......
- public void run ()
- {
- System.out.println("the student is running");
- }
- ......
- }
- //定义了一个接口Flyer
- interface Flyer
- {
- void fly ();
- }
- //定义了一个类Bird,它实现了Runner和Flyer这两个接口定义的方法。
- class Bird implements Runner , Flyer
- {
- public void run () //Runner接口定义的方法。
- {
- System.out.println("the bird is running");
- }
- public void fly () //Flyer接口定义的方法。
- {
- System.out.println("the bird is flying");
- }
- }
- //TestFish类
- class TestFish
- {
- public static void main (String args[])
- {
- Fish f = new Fish();
- int j = 0;
- j = Runner.ID;
- j = f.ID;
- }
- }
接口实现的注意点:
a)实现一个接口就是要实现该接口的所有的方法(抽象类除外)。
b)接口中的方法都是抽象的。
c)多个无关的类可以实现同一个接口,一个类可以实现多个无关的接口。
extends与implements的区别:
extends 是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承,JAVA中不支持多重继承,但是可以用接口来实现,这样就用到了implements,继承只能继承一个类,但implements可以实现多个接口,用逗号分开就行了。
比如:
class A extends B implements C,D,E {} (class 子类名 extends 父类名 implenments 接口名)
父类与子类继承关系上的不同:
A a = new B(); 结果a是一个A类的实例,只能访问A中的方法,那么又和A a = new A();有什么区别呢?
***********************************************************************************************
class B extends A
继承过后通常会定义一些父类没有的成员或者方法。
A a = new B();
这样是可以的,上传。
a是一个父类对象的实例,因而不能访问子类定义的新成员或方法。
***********************************************************************************************
假如这样定义:
class A
{
int i;
void f(){}
}
class B extends A
{
int j;
void f(){} //重写
void g(){}
}
然后:
B b = new B();
b就是子类对象的实例,不仅能够访问自己的属性和方法,也能够访问父类的属性和方法。诸如b.i,b.j,b.f(),b.g()都是合法的。此时b.f()是访问的B中的f()
A a = new B();
a虽然是用的B的构造函数,但经过upcast,成为父类对象的实例,不能访问子类的属性和方法。a.i,a.f()是合法的,而a.j,a.g()非法。此时访问a.f()是访问B中的f()
***********************************************************************************************
A a = new B(); 这条语句,实际上有三个过程:
(1) A a;
将a声明为父类对象,只是一个引用,未分配空间
(2) B temp = new B();
通过B类的构造函数建立了一个B类对象的实例,也就是初始化
(3) a = (A)temp;
将子类对象temp转换未父类对象并赋给a,这就是上传(upcast),是安全的。
经过以上3个过程,a就彻底成为了一个A类的实例。
子类往往比父类有更多的属性和方法,上传只是舍弃,是安全的;而下传(downcast)有时会增加,通常是不安全的。
***********************************************************************************************
a.f()对应的应该是B类的方法f()
调用构造函数建立实例过后,对应方法的入口已经确定了。
如此以来,a虽被上传为A类,但其中重写的方法f()仍然是B的方法f()。也就是说,每个对象知道自己应该调用哪个方法。
A a1 = new B();
A a2 = new C();
a1,a2两个虽然都是A类对象,但各自的f()不同。这正是多态性的体现。
***********************************************************************************************
转载于:https://www.cnblogs.com/simadi/p/6673129.html
Java 中extends与implements使用方法相关推荐
- JAVA中extends 与implements区别
JAVA中extends 与implements有啥区别? 1. 在类的声明中,通过关键字extends来创建一个类的子类.一个类通过关键字implements声明自己使用一个或者多个接口. exte ...
- java中extends与implements的区别
JAVA中extends 与implements有啥区别? 1. 在类的声明中,通过关键字extends来创建一个类的子类.一个类通过关键字implements声明自己使用一个或者多个接口. ...
- JAVA中extends与implements详解
JAVA中extends与implements有啥区别? 1. 在类的声明中,通过关键字extends来创建一个类的子类.一个类通过关键字implements声明自己使用一个或者多个接口. exten ...
- java中extends怎么用_Java 中extends與implements使用方法
初學Java語言, 代碼中的extends和implements讓我感到很迷惑,現在終於弄明白它們之間的區別和用法了. //定義一個Runner接口 public inerface Runner { ...
- 浅谈java中extends与implements的区别
Extends可以理解为全盘继承了父类的功能.implements可以理解为为这个类附加一些额外的功能:interface定义一些方法,并没有实现,需要implements来实现才可用.extend可 ...
- java中extends ,implements的顺序问题
interface A { void fa(); } class C implements A{ void fa() {-} } 假如现在有类D,它需要实现接口A,也要继承类C, 当把extends放 ...
- 说说java中extends与implements的区别
一.extends表示继承(扩展),只能继承不是声明为final或不是定义为abstract的类,并且只能继承 一个父类(不像C语言可以继承多个),继承后可以使用父类的方法,也可以重写父类的方法.写自 ...
- java中extends和implements的区别
一. extends是继承类,implements是实现接口. 类只能继承一个,接口可以实现多个. extends继承父类的时候可以重写父类的方法,也可以调用父类的非私有方法:implements实现 ...
- java中extends用法_JAVA的extends用法
理解继承是理解面向对象程序设计的关键.在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类).在Java中不允许多继承. (1)继承 cla ...
- Java中图形界面重绘方法
** Java中图形界面重绘方法 ** 在我们编写图形界面程序的过程中,我们就会发现,当我们将窗体拉伸,缩小(或者最大化最小化)的时候,之前在窗体上画的图形会消失了. 这是为什么呢? 1)原来 ...
最新文章
- Learun FrameWork 强大工作流引擎,让OA更智能
- Linux Ubuntu上架设FTP
- 第六周项目一-分数类的雏形(2)
- dedecms后台左侧菜单500错误怎么处理
- gprof使用介绍 (gcc -pg)
- 怎么学python-初学者如何学习Python?掌握这17个实用小技巧快速入门!
- IDE日志分析方法pt。 2
- 如何快速学习一门新的编程语言?
- [Codeforces 920E]Connected Components?
- python二级考试答案错误_如果name = “全国计算机等级考试二级Python”,以下选项中输出错误的是...
- vmware tools选项灰色解决办法(ubuntu 14.04)
- 删除下拉框只找23火星软件_删除下拉框速来火星下拉,删除下拉框就推92火星软件...
- ios8 xcode设置launchimage
- 手机下拉框是怎么做出来
- 杨国福麻辣烫递交招股书:9个月利润2亿 创始人曾放羊养猪
- 51单片机——74HC573锁存器
- css获取屏幕分辨率
- CSS普通属性篇(一):relative与absolute
- 一本通1325:【例7.4】 循环比赛日程表
- 主机远程登录报ssh_exchange_identification: read: Connection reset by peer
热门文章
- MySQL缓存推荐使用吗_Mysql 查询缓存利弊
- 又见回文数 NYOJ781
- java滥用接口_接口滥用问题
- 可做fft分析吗_2020速卖通还要做吗?速卖通2020年市场分析!
- java ssh jar_java应用程序远程登录linux并执行其命令(ssh jar包)
- 算法导论 高频算法题 数据结构与算法之美
- 矩阵计算 动手学深度学习 pytorch
- 算法:Number of Islands(岛屿的个数)
- java更改安卓图标_java – 一个按钮的Android背景文本图标
- std string与线程安全_是std :: regex线程安全吗?