java教程之java继承示例详解

所属分类: 软件编程 / java 阅读数: 39
收藏 0 赞 0 分享

什么是继承(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)的知识,所以等到讲包的时候再说.

更多精彩内容其他人还在看

java 中maven pom.xml文件教程详解

这篇文章主要介绍了java 中maven pom.xml文件教程详解,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

spring boot整合netty的实现方法

这篇文章主要介绍了spring boot整合netty的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Netty与Spring Boot的整合实现

这篇文章主要介绍了Netty与Spring Boot的整合的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Spring动态加载bean后调用实现方法解析

这篇文章主要介绍了Spring动态加载bean后调用实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

java实现画图板上画一条直线

这篇文章主要为大家详细介绍了java实现画图板上画一条直线,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java通过python命令执行DataX任务的实例

今天小编就为大家分享一篇Java通过python命令执行DataX任务的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

springBoot集成redis的key,value序列化的相关问题

这篇文章主要介绍了springBoot集成redis的key,value序列化的相关问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

java实现登录案例

这篇文章主要为大家详细介绍了java实现登录案例的相关代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

java解决请求跨域的两种方法

这篇文章主要为大家详细介绍了java解决请求跨域的两种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

SpringBoot集成Beetl后统一处理页面异常的方法

这篇文章主要介绍了SpringBoot集成Beetl后统一处理页面异常的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享
查看更多