Java接口,抽象类,继承

本文详细探讨了Java中的接口、抽象类和继承特性。接口由interface定义,其成员变量为常量,方法默认为抽象。类通过implements实现接口,一个类可以实现多个接口,必须实现接口的所有抽象方法。抽象类可以通过extends继承,子类继承抽象类必须实现所有抽象方法。此外,介绍了构造函数、方法覆盖和成员变量在继承中的行为,以及final在继承中的限制作用。
摘要由CSDN通过智能技术生成

先看以下代码:

package varification;

public interface InterfaceExtendedByParent {

    public int AGE=40;
    public void sayname();
}

由以上代码说明以下几点接口的特点:
1、接口由interface定义
2、Java接口中的成员变量默认都是public,static,final类型的(都可省略),必须被显示初始化,即接口中的成员变量为常量(大写,单词之间用”_”分隔)
3、接口中的方法默认都是public,abstract类型的(都可省略),没有方法体,不能被实例化,也就是接口中的方法都是抽象方法

接着看以下代码:

package varification;

public abstract class Parent implements InterfaceExtendedByParent {

    public String name="bob";
    public abstract void sayname();

}

由以上代码接着说明接口的实现和抽象函数:
4、接口不能被继承,只能被实现,通过implements关键字
5、接口中没有构造方法,不能被实例化
6、一个接口不能实现(implements)另一个接口,但它可以继承多个其它的接口
7、接口必须通过类来实现它的抽象方法
8、一个类如果实现了一个接口但没有实现接口中的所有抽象方法,则这个类只能被定义为抽象类

再看以下代码:

package varification;

public class Child extends Parent{

    public void sayname(){
        System.out.println(name+""+AGE);
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Child c=new Child();
        c.sayname();
    }
}

由以上代码说明继承的相关特点:
1、子类继承了一个抽象类,则必须实现该抽象类中的所有抽象方法
2、父类实现了的接口也可以被子类所继承

另外说明几点继承的其他特点:
1.构造函数:
当子类继承一个父类时,构造子类时需要调用父类的构造函数,存在三种情况
(1),父类无构造函数或者一个无参数构造函数,子类若无构造函数或者有无参数构造函数,子类构造函数中不需要显式调用父类的构造函数,系统会自动在调用子类构造函数前调用父类的构造函数
(2),父类只有有参数构造函数,子类在构造方法中必须要显示调用父类的构造函数,否则编译出错
(3),父类既有无参数构造函数,也有有参构造函数,子类可以不在构造方法中调用父类的构造函数,这时使用的是父类的无参数构造函数
//以上三个结论已经过代码验证
2.方法覆盖:
(1)子类覆盖父类的方法,必须有同样的参数返回类型,否则编译不能通过
(2)子类覆盖父类的方法,在jdk1.5后,参数返回类可以是父类方法返回类的子类
(3)子类覆盖父类方法,可以修改方法作用域修饰符,但只能把方法的作用域放大,而不能把public修改为private
(4)子类方法能够访问父类的protected作用域成员,不能够访问默认的作用域成员
(5)子类的静态方法不能隐藏同名的父类实例方法
(6)java与C++一样,继承的方法具有多态性
//以上6个结论已经过代码验证
3.成员覆盖:
(1)当子类覆盖父类的成员变量时,父类方法使用的是父类的成员变量,子类方法使用的是子类的成员变量
这个听起来很容易理解的一回事,但是实际使用过程中很多人容易搞混:尤其是在多态的时候,调用一个被继承的方法,该方法访问是一个被覆盖的成员m,那么方法中到底是访问了父类的成员还是子类的成员m?结论是,若实际调用的是父类的方法,就使用了父类的该成员m,若实际调用的是子类的方法,就使用子类的成员m,记住一句,每个类使用成员都相当于在前面加了 一个this指针。
4.final的继承
(1)final类不可以被继承
(2)final方法不可以被覆写
(3)final变量不可以被覆写

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值