Java 中extends与implements区别和使用

1.extends与implements的区别:
extends:是继承父类,只要被继承的类声明不是fina或者定义为abstract的抽象类就都能被继承,java与C#同样是不支持多重继承,但是可以用接口来实现。

implements:是实现接口的关键词,可实现多个接口,用“,”号分隔开即可:

public class student extends userInfo implements Istudent,Iclass { .....}

【class 子类名 extends 父类名 implenments 接口名】

2.父类与子类继承关系上的不同:
userInfo u = new student(); 结果u是一个userInfo类的实例,只能访问userInfo中的方法,和userInfo u = new userInfo();有什么区别呢?
class student extends userInfo
继承过后通常会定义一些父类没有的成员或者方法。
userInfo u = new student();
这样是可以的向上访问,不能向下访问。
u是一个父类对象的实例,因而不能访问子类定义的新成员或方法。

例如:

class userInfo
{
   int userId;
   void fun(){}
}
class student extends userInfo
{
    int studentid;
    void fun(){}       //重写
    void fun2(){}
}
student s = new student();
s就是子类对象的实例,不仅能够访问自己的属性和方法,也能够访问父类的属性和方法。诸如s.userid,s.studentid,s.fun(),s.fun2()都是合法的。此时s.fun()是访问的studnent中的fun() 而非userInfo中的fun()

userInfo u = new student();
u虽然是用的student的构造函数,但已过向上访问,成为父类对象的实例,不能访问子类的属性和方法。u.userid,u.fun()是合法的,而u.studentid,u.fun2()是非法。此时访问u.fun()是访问student中重写后的fun()

userInfo u = new student(); 实际上有三个过程:
(1) userInfo u;
将u声明为父类对象,只是一个引用,未分配空间
(2) student s = new student();
通过s类的构造函数建立了一个s类对象的实例,也就是初始化student类
(3) u = (userInfo)s;
将子类对象s转换为父类对象userInfo并赋给u,这就是上抛,是安全的。
经过以上3个过程,u就彻底成为了一个userInfo类的实例。
子类往往比父类有更多的属性和方法,上抛只是舍弃,是安全的;而向下访问下抛有时会增加,通常是不安全的。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值