java中extends怎么用_Java 中extends與implements使用方法
初學Java語言, 代碼中的extends和implements讓我感到很迷惑,現在終於弄明白它們之間的區別和用法了。
//定義一個Runner接口 public inerface Runner { int ID = 1; void run ();}
//定義一個interface Animal,它繼承於父類Runnerinterface 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"); } ......} //定義了一個接口Flyerinterface 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()不同。這正是多態性的體現。
***********************************************************************************************
java中extends怎么用_Java 中extends與implements使用方法相关推荐
- java中抽象类继承抽象类_Java中的抽象类用示例解释
java中抽象类继承抽象类 Abstract classes are classes declared with abstract. They can be subclassed or extende ...
- java不能覆盖父类的_java中子类覆盖父类方法所必须满足的条件
一.描述 子类重写(覆盖)父类的方法必须满足的条件: 1.父类中的方法在子类中必须可见,即子类继承了父类中的该方法(可以显式的使用super关键字来访问父类中的被重写的方法), 如果父类中的方法为pr ...
- java抽象类有什么用_java中抽象类的作用是什么?抽象类作用的例子
你知道java当中抽象类的作用是什么吗?有什么作用?下面和小编一起来详细的了解一下具体的作用,以及看看抽象类作用的例子吧! 一.java抽象类的作用 java抽象类的作用具体的可以分成以下的三点: 1 ...
- java关键字有什么用_JAVA中关键字有什么用
展开全部 Java关键e68a84e8a2ad3231313335323631343130323136353331333363356566字及其作用 一. 关键字总览: 访问控制 private pr ...
- java父类声明子类实现_java中父类声明子类实例化
问题: 1.比如两个类父类:Person 子类 Student extends Person在使用时候,这样写:Person person=null; //声明对象person=new Student ...
- java中组件与容器_java中的容器组件和非容器组件
1.java使用到的图形类主要在java.awt 与javax.swing包中. 2.java.awt 与 javax.swing包的区别: ① java.awt中使用的图形类都是依赖于系统的图形库的 ...
- java boolean几个字节_Java中boolean类型到底占用多少个字节?
1.时间:2017-07-03 07:37:06YuanMxy 2.问题描述:今天在复习java基础的时候发现一小问题,Java中boolean类型到底占用多少个字节? 3.问题解答: (1)什么是b ...
- java 基本类型的引用_Java中的基本数据类型与引用数据类型
一.基本数据类型 byte.short.int.long(整数类型) float.double(浮点数类型) char(字符型) boolean(布尔类型 ) Java数据大多数存放在堆栈中.栈区:存 ...
- java对于数组的定义_Java中方法的定义与使用,以及对数组的初步了解。
方法 方法的含义 定义: 方法就是用来完成解决某件事情或实现某个功能的办法. 方法实现的过程中,会包含很多条语句用于完成某些有意义的功能--通常是处理文本,控制输入或计算数值. 我们可以通过在程序代码 ...
最新文章
- 跨域?拒绝说概念(内含demo)
- ABAP TBL隐藏列
- 策略(strategy)模式
- tmux多窗口工具基本操作
- 依赖Zookeeper生成全局唯一序列号
- 计算机工程与应用查重吗,计算机工程期刊录用率_计算机工程与应用期刊_计算机八大核心期刊...
- 'tensorflow' has no attribute 'sub'
- php商城系统源码的好处有哪些?
- 武汉离互联网第一梯队还有多远?
- 测温传感器 温度传感器 温度传感器生产厂家 温度变送器 温度感应器 温度测量 热电偶 热电偶传感器 热电偶套管 热电偶温度传感器 热电偶温度计 热电阻传感器 热电阻温度计 电阻温度探测 精密RTD
- 爬虫模拟登陆的几种方法
- 平面设计怎么学,平面设计怎么学排版:夏雨老师
- [完全免费] 在线UML Class Diagram 类图工具 - 教程第1部分
- 背了单词再也不怕忘,多邻国的AI要逆天!
- Android 开发之Loading
- C# winform TreeView 屏蔽双击展开/折叠子节点
- 2007年中国优秀无线互联网站点TOP50点评
- 第38篇:Checkmarx代码审计/代码检测工具的使用教程(1)
- ButterKnife 牛油刀使用
- 【历史上的今天】2 月 21 日:Spotify 创始人出生;《塞尔达传说》系列诞生;游戏门户网站 GameSpy 关闭
热门文章
- PrimeNG01 angular集成PrimeNG
- Apache 简单设置虚拟主机
- 管理博文Hive大数据-Mysql的安装和启动---大数据之Hive工作笔记0007
- 软考信息系统项目管理师_项目风险管理---软考高级之信息系统项目管理师019
- AndroidStudio_安卓原生开发_精美自定义多选控件_多选Spinner_MultiSpinner_拿来即用---Android原生开发工作笔记144
- 大数据之-Hadoop3.x_MapReduce_编程规范---大数据之hadoop3.x工作笔记0086
- python_开发环境介绍_交互模式使用_IDE介绍和使用---python工作笔记010
- 鸿蒙OS应用开发_基础篇_编写第一个HarmonyOs应用_体会HarmonyOs的一次开发多端部署_以及分布式任务调度_IDE安装_了解应用组件以及应用布局---HarmonyOs开发工作笔记001
- 编程语言_JavaScript_面试题004
- VC++多线程工作笔记0007---线程间同步机制2