---恢复内容开始---

这篇随笔和大家讲讲java中类的继承是什么?希望对你们有所帮助。

目录

  • 一、java继承是什么?
  • 二、为什么使用java继承
  • 三、java继承的实现  
    • 1.1  java继承的基本语法
    • 1.2  super的用法    

 

一、Java继承是什么?

简单来讲,Java中的继承是一个对象获取父对象的所有属性和行为的机制。它是面向对象编程系统(OOP)的重要组成部分。Java中继承的思想是,创建基于现有类的新类。从现有类中继承,可以重用父类的方法和字段。此外,还可以在当前类中添加新方法和字段

继承表示IS-A关系,也称为父子关系。

二·、为什么使用继承?

继承就是 比如,你和你的父亲,你可以继承你父亲身上的基因,但继承基因的同时你可以除了继承你父亲基因的同时再创造新的基因,就比如你父亲不高,但是你想变高,就可以在基础的同时使用重写来改变你的身高。

那为什么要使用继承呢?

1、可以实现方法重写(这样可以实现运行时多态性)。提高了代码的复用性。

2、继承允许我们重用代码,它提高了Java应用程序的可重用性。

三、继承的实现

 1.java继承的基本语法

 package pkg12;
 //Son是子类 ,Father是父类   所以就是子类继承(extends)父类
 public class Son extends Father{
     //方法......

 }

如果要继承一个类的话,就要使用extends关键字

提示:继承按时着成员在派生类中课访问,而不是仅仅限于当前定义的类,要在包含基类的包的外部派生一个类,这个基类就必循声明为public ,如果没有声明为public 这个类就不能直接地扩展到包的外部。

  2、继承的特点:

      • 子类会把父类所以的属性和方法都继承下来。(先不考虑final)
      • 如果父类包含了共同的属性和方法,我们可以使用继承来设计程序
      • 子类使用extends关键字继承父类的共同属性以外,子类话可以有自己特有的属性和方法。
      • 父类更通用,子类更具体。
      • 子类只能获得父类中的非private的属性,如果想要继承就得提供公共的set和get的方法,私有的方法是无法继承的。  

用一个习题,来解释一下什么叫做继承,代码如下:

 package pkg11;

 //定义了一个老师类 同时都有两个属性和两个方法
 class TeachJava{
     String name;
     int age;

     public void TeachJava(){
         System.out.println(this.name+"在上java课");
     }
     public void sleep(){
         System.out.println(this.name+"在休息");
     }
 }

 //定义了二个老师类 同时都有两个属性和两个方法
 class TeachHtml{
     String name;
     int age;
     public void TeachHtml(){
         System.out.println(this.name+"在上Html课");
     }
     public void sleep(){
         System.out.println(this.name+"在休息");
     }
 }

 public class TextExtends{
     public static void main(String args[]){
         //实例化出第一个老师
         TeachJava  tj = new TeachJava();
         tj.name = "张三";
         tj.age = 18 ;
         tj.TeachJava();
         tj.sleep();
         //实例化出第二个老师
         TeachHtml th = new TeachHtml();
         th.name = "李四";
         th.age = 34;
         th.TeachHtml();
         th.sleep();
     }
 }

运行效果:

看到我们定义两个老师类,大家有没有发现一个问题呢?就是我定义了两个老师类, 两个老师类里面发现两个相同的属性和一个方法 ,这时我们就可以采用继承的方式来设计这个案例。

那我们应该怎么设计呢? 遵循上面说到的继承语法:子类 继承 父类。

 package pkg11;
 //我们可以把相同的属性和方法放在一个类中,定义为  父类

 //父类
 class Teacher{
     String name;
     int age;

     public void sleep(){
         System.out.println(this.name+"在睡觉");
     }
 }

 //子类

 //        子类     继承     父类
 class TeachJava extends Teacher{
     public void TeachJava(){
         System.out.println(this.name+"在讲java课程");
     }
 }

 //        子类     继承     父类
 class TeachHtml extends Teacher{

     public void TeachHtml(){
         System.out.println(this.name+"在讲HTML课程");
     }
 }

 public class TextExtends1{
     public static void main(String args[]){
         TeachJava tj = new TeachJava();
         tj.name = "张三";//调用父类中的属性
         tj.age = 20;
         tj.TeachJava();//钓鱼自己的方法
         tj.sleep();//调用父类的方法。
         TeachHtml th = new TeachHtml();
         th.name="李四";//调用父类中的属性
         th.age = 25;
         th.TeachHtml();//调用自己的方法
         th.sleep();//调用父类的方法。
     }
 }

两个老师类的中重复的属性和方法,我没个把他归结为一个类当中作为 父类  ,因为我们继承的父类的属性和方法,所以我们就有和父类相同的属性和方法,所以继承的最明显的优点就是减少了代码的重复性。

这样继承和我们之前写的代码运行效果会一样吗?运行效果如下:

子类只能获得父类中的非private的属性,如果想要继承就得提供公共的set和get的方法,私有的方法是无法继承的。

这句特点要这样理解呢  为什么说要继承就的使用set和get方法呢?先看代码: 

package pkg11;
//我们可以把相同的属性和方法放在一个类中,定义为  父类

//父类
class Teacher{
    private String name;
    int age;

    public void sleep(){
        System.out.println(this.name+"在睡觉");
    }
}
//子类
//        子类     继承     父类
class TeachJava extends Teacher{
    public void TeachJava(){
        System.out.println(name+"在讲java课程");
    }
}
//        子类     继承     父类
class TeachHtml extends Teacher{

    public void TeachHtml(){
        System.out.println(this.name+"在讲HTML课程");
    }
}
public class TextExtends1{
    public static void main(String args[]){
        TeachJava tj = new TeachJava();
        tj.name = "张三";
        tj.age = 20;
        tj.TeachJava();
        tj.sleep();
        TeachHtml th = new TeachHtml();
        th.name="李四";
        th.age = 25;
        th.TeachHtml();
        th.sleep();
    }
}

在我父类属性中加了一个private,这样我们再运行运行程序看看会发生什么?

这里发生了报错,都在name的报错,所以上面的特点 说的真是这点私有的方法是无法继承的。

如果想在继续继承父类的话,那么我们就的使用封装的方法,get和set

 //父类
 class Teacher{
     private String name;
     int age;

     //封装
     public void setName(String name){
         this.name = name;
     }
     public void getName(){
         return name;
     }
     public void sleep(){
         System.out.println(this.name+"在睡觉");
     }
 }

之后调用方法就可以进行继承了。 1 package pkg11; 2 //我们可以把相同的属性和方法放在一个类中,定义为 父类 3

 //父类
 class Teacher{
     private String name;
     int age;

     //封装
     public void setName(String name){
         this.name = name;
     }
     public void getName(){
         return name;
     }
     public void sleep(){
         System.out.println(this.name+"在睡觉");
     }
 }
 //子类
 //        子类     继承     父类
 class TeachJava extends Teacher{
     public void TeachJava(){
         System.out.println(this.getName+"在讲java课程");
     }
 }
 //        子类     继承     父类
 class TeachHtml extends Teacher{

     public void TeachHtml(){
         System.out.println(this.getName()+"在讲HTML课程");
     }
 }
 public class TextExtends1{
     public static void main(String args[]){
         TeachJava tj = new TeachJava();
         //tj.getName = "张三";       tj.getName("张三");
         tj.age = 20;
         tj.TeachJava();
         tj.sleep();
         TeachHtml th = new TeachHtml();
         //th.getName="李四";       th.getName("李四");
         th.age = 25;
         th.TeachHtml();
         th.sleep();
     }
 }

运行效果:

以上继承是单一继承,java还有多极继承

多级继承: 在多级继承中,派生类将继承基类,并且派生类也充当其他类的基类。在下面的图像中,类A用作派生类B的基类,后者又用作派生类C的基类。在Java中,类不能直接访问祖父母的成员。

就是可以继承多个

package pkg11;
//多极继承
class A{

}

class B extends A{

}

class C extends B{

}

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

    }
}

运行效果:

但是不支持多继承,它可以支持继承多个类,但不支持同时继承两个类。

这样是不支持的

 package pkg11;
 //错误展示

 class A{

 }

 class B{

 }

 class C extends A,B{

 }

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

     }
 }

运行效果:

总结:

继承的优缺点
 优点:1、代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性。    

    2、提高代码的重用性,子类可以形似父类,但又异于父类。

    3、提高代码的可扩展性。

 缺点:

    1、只要继承,就必须拥有父类的所有属性和方法;
    2、降低代码的灵活性。子类必须拥有父类的属性和方法,让子类多了约束;
    3、增强了耦合性,当父类的常量、变量和方法被修改时,需要考虑子类的修改,而且在缺乏规范的环境下,修改可能会造成严重的后果。

java类的继承(基础)的更多相关文章

  1. 【JAVA零基础入门系列】Day13 Java类的继承与多态

    继承是类的一个很重要的特性,什么?你连继承都不知道?你是想气死爸爸好继承爸爸的遗产吗?(滑稽) 开个玩笑,这里的继承跟我们现实生活的中继承还是有很大区别的,一个类可以继承另一个类,继承的内容包括属性跟 ...

  2. java类的继承

    继承就是在一个现有类型的基础上,通过增加新的方法或者重定义已有方法(重写)的方式,产生一个新的类型.继承是面向对 象的三个基本特征--封装.继承.多态的其中之一,我们在使用java时编写的每一个类都是 ...

  3. java类的继承的一些细节

    类的继承是java面向对象体系的一个重要方面(封装.继承.多态),对于java类的继承,需要注意如下细节. 1.构造函数. 如果一个类没有任何构造函数,系统会默认分配一个无参的构造函数给它,这个构造函 ...

  4. Java 类设计----Java类的继承

    Java类的继承 为描述和处理个人信息,定义类Person: public class Person { public String name; public inat age; public Dat ...

  5. Java面向对象-Java类的继承及super关键字

    Java面向对象-Java类的继承 1,继承定义以及基本使用 定义:子类能够继承父类的属性和方法: 注意点:Java中只支持单继承: 私有方法不能继承: 上代码: package com.java12 ...

  6. java类的继承,多态,抽象类与接口

    知识点梳理:     1,怎样定义自己的类. MyStarFrame,MyStarPanel 类中定义: (1)属性(数据),变量. (2)方法(函数),行为. (3)构造方法(特征,作用,何时被调用 ...

  7. Java类与继承

      Java:类与继承 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大特性都离不开类,只有存在类,才能体现面向对象编程的特点,今天我们就来了解一些类与继承的相 ...

  8. Java类的继承与方法调用的一个小问题

    public class Father { protected void server(int i){ switch (i){ case 1: methodone(); break; case 2: ...

  9. java类与继承(转载)

    关于java的类与继承面链接是一个网友总结的,还有列子我个人觉得很详细 固拿来收藏,需要的朋友可从这里访问: http://www.cnblogs.com/dolphin0520/p/3803432. ...

随机推荐

  1. Extjs中数据导出到Excel

    1.前端代码(URL+前端传入参数) window.location.href="studnetMaintainAction!exportExcel"               ...

  2. 关于WebSocket需要知道

    WebSocket 概念 WebSocket是再单个TCP连接上进行双工通讯的协议,仅需要通过一次握手两个之间就可以创建持久性的连接,进行双向数据传输.WebSocket 是HTML5新增加的协议. ...

  3. java一个大接口拆用多线程方式拆分成多个小接口

    问题引入 目的:我们的接口A  分别调用了a1 a2 a3 三个接口,最终返回值是 a1的返回值+a2的返回值+a3的返回值 如果同步执行 a1 a2 a3 然后结果相加 很慢 . 如果异步执行 无法 ...

  4. Shim 与 Polyfill

    Shim: 用来向后兼容.比如 requestIdleCallback,为了在旧的环境中不报错,可以加 shim. 使用环境中现有的 api 来实现,不会引入额外的依赖或其他技术. Polyfill: ...

  5. 对EF的封装

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  6. 结合JDK源码看设计模式——原型模式

    定义: 指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.不需要知道任何创建的细节,不调用构造函数适用场景: 类初始化的时候消耗较多资源 new产生的对象需要非常繁琐的过程 构造函数比较 ...

  7. html&css学习二

    表格&b标签 表格 表格标签主要包含三个标签 <table> <tr> <td>单元格内的文字</td> ... </tr> ... ...

  8. dart 如何优雅的避空

    前言 对于每一个程序员来说,空指针异常应该是基本都会遇到过的异常,而且这个异常出现的概率还比较大. 但是,空指针异常又是最容易解决的异常,因为只要加个非空判断就可以避免了. 本篇通过对比一般非空判断和 ...

  9. linux中使用docker-compose部署软件配置分享

    本篇将分享一些 docker-compose 的配置,可参考其总结自己的一套基于docker的开发/生产环境配置. 安装docker及docker-compose install docker cur ...

  10. 【STM32H7教程】第3章 STM32H7整体把控

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第3章   STM32H7整体把控 初学STM32H7一 ...