java教程之java继承示例详解

 更新时间:2014年04月03日 11:57:52   作者:  
这篇文章主要介绍了java继承示例详解,需要的朋友可以参考下

什么是继承(extends)?

继承是:新定义的类是从已有的类中获取属性和方法的现象。 这个已有的类叫做父类, 从这个父类获取属性和方法的类叫做子类。

ExtendsDemo1.java

复制代码 代码如下:

/*什么是继承*/
public class ExtendsDemo1 {
    public static void main(String[] args) {
        Truck t = new Truck();
        t.size = 100;           //不建议这么写。初始化成员变量最好使用构造方法,或者提供set(), get()接口.
                                //货车类的一个实例t从汽车类从继承了size, color属性。
                                //而货车比汽车多一个货箱
    }  
}

class Car {                     //汽车
    int size;                   //车体大小
    String color;               //颜色
}

class Truck extends Car {       //货车
    String packingBox;          //货箱
}

继承的好处

1. 提高了代码的重用性

2. 让类和类之间产生了关系, 为多态创造了条件。

继承(extends)的格式 

复制代码 代码如下:

class SubClass extends SuperClass {
 //执行语句;
}


super关键字

1. super关键字和this的用法相同

2. this代表本类引用, super代表父类引用

3. 当子类和父类出现同名成员的时候, 可以用super 和 this进行区分

SuperDemo.java

复制代码 代码如下:

/* super的用法
 * 输出结果:
 * super.i = 10, this.i = 20
 */
public class SuperDemo {
    public static void main(String[] args) {
        new SubClass().showMessage();
    }  
}

class SuperClass {
    int i = 10;
}

class SubClass extends SuperClass {
    int i = 20;

    public void showMessage() {
        System.out.printf("super.i = %d, this.i = %d\n", super.i, this.i);
    }  
}

对从父类继承过来的方法进行重写(Override)

1. 当子类中出现与父类一模一样的方法(返回值, 函数名, 形参)时, 会出现重写(Override)操作.

OverrideDemo1.java

复制代码 代码如下:

/* 怎么对从父类继承过来的方法进行重写(Override)
 * 输出结果:
 * SuperClass: I am good~
 * SubClass: I am excellent~~~
 */
public class OverrideDemo1 {
    public static void main(String[] args) {
        SubClass sc = new SubClass();
        sc.speak();
    }  
}

class SuperClass {
    public void speak() {
        System.out.println("SuperClass: I am good~");
    }  
}

class SubClass extends SuperClass {
    @Override                   //@Override表示下面出现的方法会出现重写操作,由编译器检查,如果达不到重写的条件,就会报错。一定程度上增加了代码的安全性
和健壮性
    public void speak() {
        super.speak();
        System.out.println("SubClass: I am excellent~~~");
    }  
}

2. 在对父类方法进行重写(Override)操作的时候,子类不允许出现与父类同名同参但是不同返回类型的方法.

OverrideDemo2.java

复制代码 代码如下:

/* 子类中不允许出现与父类同名同参但是不同返回类型的方法
 * 出错信息:
 * OverrideDemo.java:20: error: f() in SubClass cannot override f() in SuperClass
 *  public int f() {
 *                 ^
 *                   return type int is not compatible with void
 *                   OverrideDemo.java:19: error: method does not override or implement a method from a supertype
 *                      @Override
 *                          ^
 *                          2 errors
 */
public class OverrideDemo2 {
    public static void main(String[] args) {

    }  
}

class SuperClass {
    public void f() {

    }  
}

class SubClass extends SuperClass {
    @Override
    public int f() {
        return 1;
    }  
}

3. 子类重写父类的方法的访问权限要大于或者等于父类中被重写的方法

OverrideDemo3.java

复制代码 代码如下:

/* 子类重写父类的方法的访问权限要大于或者等于父类方法的访问权限
 * 出错信息:
 * OverrideDemo.java:18: error: f() in SubClass cannot override f() in SuperClass
 *  protected void f() {
 *                     ^
 *                       attempting to assign weaker access privileges; was public
 *                       1 error
 */

public class OverrideDemo3 {
    public static void main(String[] args) {

    }  
}

class SuperClass {
    public void f() {
    }  
}

class SubClass extends SuperClass {
    @Override
    protected void f() {            //把这里的访问权限改为public即可

    }  
}

访问控制符

访问控制符有:public, protected, default, private

有些需要一点包(package)的知识,所以等到讲包的时候再说.

相关文章

  • SpringBoot实现优雅停机的三种方式

    SpringBoot实现优雅停机的三种方式

    优雅停机(Graceful Shutdown)是指应用在接收到停止信号后,能够妥善处理现有请求、释放资源,然后再退出的过程,本文将详细介绍SpringBoot中实现优雅停机的三种方式,需要的朋友可以参考下
    2025-04-04
  • Java使用arthas修改日志级别详解

    Java使用arthas修改日志级别详解

    在我们线上环境中,一般不会开启debug级别的日志,为了提高性能 info和warning级别的日志也一般不会打印出来,那么如果遇到线上问题,除了使用arthas定位问题,想通过查询日志来实现问题定位,如何查看logger信息,更新logger level呢,下面我们来了解arthas修改日志级别
    2022-06-06
  • EasyExcel自定义导出列和顺序实例代码

    EasyExcel自定义导出列和顺序实例代码

    这篇文章主要给大家介绍了关于EasyExcel自定义导出列和顺序的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • spring boot 开发soap webservice的实现代码

    spring boot 开发soap webservice的实现代码

    这篇文章主要介绍了spring boot 开发soap webservice的实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • Spring中依赖注入(DI)几种方式解读

    Spring中依赖注入(DI)几种方式解读

    这篇文章主要介绍了Spring中依赖注入(DI)几种方式解读,构造器依赖注入通过容器触发一个类的构造器来实现的,该类有一系列参数,每个参数代表一个对其他类的依赖,需要的朋友可以参考下
    2024-01-01
  • java中抽象类和接口的相同和不同点介绍

    java中抽象类和接口的相同和不同点介绍

    大家好,本篇文章主要讲的是java中抽象类和接口的相同和不同点介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • java实现二维码生成的几个方法(推荐)

    java实现二维码生成的几个方法(推荐)

    本篇文章主要介绍了java实现二维码生成的几个方法(推荐),具有一定的参考价值,有兴趣的可以了解一下。
    2016-12-12
  • Spring Security实现两周内自动登录

    Spring Security实现两周内自动登录"记住我"功能

    登录过程中经常使用的“记住我”功能,也就是我们经常会在各种网站登陆时见到的"两周内免登录",“三天内免登录”的功能。今天小编给大家分享基于Spring Security实现两周内自动登录"记住我"功能,感兴趣的朋友一起看看吧
    2019-11-11
  • Java语言class类用法及泛化(详解)

    Java语言class类用法及泛化(详解)

    这篇文章主要介绍了Java语言class类用法及泛化(详解),大家都知道Java程序在运行过程中,对所有的对象今夕类型标识,也就是RTTI。这项信息记录了每个对象所属的类,需要的朋友可以参考下
    2015-07-07
  • Spring 中如何根据环境切换配置 @Profile

    Spring 中如何根据环境切换配置 @Profile

    这篇文章主要介绍了Spring中如何根据环境切换配置@Profile的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08

最新评论