Java面向对象编程之继承(一)

前言

Java语言有三大重要的特性,分别是继承、多态和封装。今天我们就来聊聊继承,继承是复用程序代码的有力手段,使用继承我们会少写许多代码,也可以让我们在写代码的时候逻辑变得更加清楚。

继承的基本语法

在Java语言中,用“extends”关键字来表示一个类继承了另一个类,例如:  public class Sub extends Base{ ... } ,以上代码表明Sub类继承了Base类,我们说Sub类是Base类的子类,Base类是Sub类的父类。

那么Sub类到底继承了Base类的那些东西呢?这需要分情况讨论:

  • 当Sub和Base位于同一个包中时:Sub继承了Base中的public、protected和默认访问级别的成员变量和成员方法。
  • 当Sub和Base位于不同的包中时:Sub继承了Base中的public和protected访问级别的成员变量和成员方法。

以下程序分别演示了上述两种情况Sub继承Base的那些成员变量和方法:

//先创建父类Base
public class Base{
    public int publicVarOfBase = 1; //public访问级别
    private int privateVarOfBase = 1;  //private访问级别
    int defaultVarOfBase = 1; //默认访问级别
    protected void methodOfBase(){}  //protected访问级别
}
//创建子类Sub继承父类Base
public class Sub extends Base{
    public void methodOfSub(){
        publicVarOfBase = 2;  //合法,可以访Base的public类型的变量
        defaultVarOfBase = 2; //合法,可以访问Base的默认访问级别的变量
        privateVarOfBase = 2;//非法,不能访问Base的private类型的变量

        methodOfBase(); //合法,可以访问Base的protected类型的方法
    }

    public static void main(String[] args){
        Sub sub = new Sub();
        sub.publicVarOfBase = 3; //合法,Sub继承了Base的public类型的变量
        sub.privateVarOfBase = 3; //非法,Sub没有继承Base的private类型的变量
        sub.defaultVarOfBase = 3; //合法,Sub继承了Base的默认访问级别的变量

        sub.methodOfBase(); //合法,Sub继承了Base的protected类型的方法
        sub.methodOfSub(); //合法,这是Sub本身的实例方法
    }
}

Java语言不支持多继承,也就是说一个类只能直接继承另一个类。这里之所以说“一个类直接继承另一个类”是因为该类还可以有多个间接的父类,例如以下代码表明B类继承C类,A类继承了B类,C类是A类的间接父类:

public class A extends B{...}
public class B extends C{...}

另外,所有Java中的类都直接或者间接地继承了java.lang.Object类,它是所有类的祖先,这个类中定义了所有的Java对象都具有的相同的行为。所以,在定义一个类时,没有使用“extends”关键字,就不能草率地以为该类没有继承别的类,而是表明这个类直接继承了Object类。

时间: 2024-10-11 07:47:12

Java面向对象编程之继承(一)的相关文章

Java面向对象编程之继承(二)

在上一篇博客中,我们已经了解继承的基本概念和语法,那么今天我们就来聊一聊有关于继承的其他东西. 让我们来了解一下什么是方法重载(overload)和方法覆盖(override) 方法重载(overload) 对于类的的方法(包括从父类中继承的方法),如果有两个方法的方法名相同,但参数不一致,那么可以说,一个方法是另一个方法的重载方法. 重载方法必须满足以下条件: 方法名相同 方法的参数类型.个数.顺序至少有一项不相同 方法的返回类型可以不相同 方法的修饰符可以不相同 其中,参数的类型.个数和顺序

C++面向对象编程之继承

一. 封装和继承 1.1 封装的概念 封装:通过访问控制属性对类类型中的属性和行为进行打包和限制. 1.2 继承:通过一种机制表达出类型之间的共性和特性的方式. 继承基本语法: class 子类名 : 继承方式1 父类1,继承方式2 父类2... { 类的定义 }; 继承方式: public  公有方式 private 私有方式 protected 保护方式 1.3 继承的特性 (1) 一个子类类型的对象在任何时候都可以看作基类类型的对象(心里始终要记着). (2) 一个父类类型的对象作为子类对

Scala 面向对象编程之继承

extends关键字 // Scala中,让子类继承父类,与Java一样,也是使用extends关键字 // 继承就代表,子类可以从父类继承父类的field和method:然后子类可以在自己内部放入父类所没有,子类特有的field和method:使用继承可以有效复用代码 // 子类可以覆盖父类的field和method:但是如果父类用final修饰,field和method用final修饰,则该类是无法被继承的,field和method是无法被覆盖的 class Person { private

3. 第一章:C#面向对象编程之继承和多态

第一章:C#面向对象编程 第二节:继承和多态 继承可以让class具有一种特殊的能力,即实现class本身定义的所有功能外,还可以对父类(或称为基类.超类)的某些属性和功能进行扩展,这样的类我们称之为子类(或派生类). 继承有如下的几个规则: 1. 可传递性: 如: C是B的子类,B是A的子类,那么C会同时继承B和A:(object为所有类的基类) 2. 唯扩展性: 子类应是对父类的扩展,而不能在子类除去父类里面的定义: 3. 构造函数和析构函数不能被继承: 除去构造函数和析构函数不能被继承,其

java面向对象编程之反射

一 java中类的加载 1 jvm使用一个类的时候,是通过一个ClassLoader,把类加载到内存中,获得该类的Class对象: 2 ClassLoader加载一个类的时候,会检查上级的ClassLoader是否没有加载过该类,若已加载过,不再加载: 二 程序块 静态程序块,在类加载的时候就会被执行,A加载的时候,会将static程序块部分执行: 若去掉static,变成非静态程序块,在A类加载的时候,非静态程序块不会被执行,只有创建实例的时候才会被执行,创建一个实例执行一次: package

Java面向对象编程之Java语言中的修饰符

近日,读了孙卫琴老师的<Java面向对象编程>一书,心中颇有些感悟,想着将其记录下来. Java中的修饰符 在Java语言中,有这样一些单词(说得再准确点儿,应该是形容词):abstract(抽象的).static(静态的).public(公共的).protected(受保护的).private(私有的).synchronized(同步的).native(本地的).transient(暂时的).volatile(易失的)和final(不可改变的),它们被成为修饰符,这些修饰符可以修饰类.变量和

Java面向对象编程之____类与对象

重要的事情说三遍 我们认为面向对象编程是对现实世界的模拟,而程序中一个个的类组成了我们的程序,就好比现实世界中的人类.车类.建筑类.动物类等等这些类组成了世界一样. 我们认为面向对象编程是对现实世界的模拟,而程序中一个个的类组成了我们的程序,就好比现实世界中的人类.车类.建筑类.动物类等等这些类组成了世界一样. 我们认为面向对象编程是对现实世界的模拟,而程序中一个个的类组成了我们的程序,就好比现实世界中的人类.车类.建筑类.动物类等等这些类组成了世界一样. 一.在Java中创建一个类 语法 cl

js原生设计模式——2面向对象编程之继承—new类式继承

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>classInherit</title>    <script type="text/javascript">    //声明父类    function superClass(){        this.name

js原生设计模式——2面向对象编程之继承—call(this)构造函数式继承

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>constructorfunctionInherit</title>    <script type="text/javascript">    //声明父类    function superClass(id){