Java继承的基础

Java中,被继承的类叫做超类,继承超类的类叫子类。(一个子类亦可以是另一个类的超类)

继承一个类,只需要用关键字 extends 把一个类的定义合并到另一个类中就可以了。

例子中创建了一个超类A和一个名为B的子类。

class A {

int i,j ;

void showij() {

System.out.println( "i and j : " + i + " " + j ) ;

}

}

class B extends A {

// B类继承了A类 由此B类可以直接使用A类的所有内容

int k ;

void showk() {

System.out.println("K: " + k ) ;

}

void sum() { // 因为B继承了A所以可以获得A类中的变量i,j

System.out.println("i+j+k: " + (i+j+k)) ;

}

}

public class SimpleInheritance {

public static void main(String args[]) {

A superOb = new A() ;

B subOb = new B() ;

superOb.i = 10 ;

superOb.j = 20 ;

System.out.println("Contents of superOb: ") ;

superOb.showij() ;

System.out.println() ;

subOb.i = 7 ;

subOb.j = 8 ;

subOb.k = 9 ;

System.out.println("Contents of subOb: ") ;

subOb.showij() ;

// 因为继承A类,所以B类的实例对象可以调用A类的方法

subOb.showk() ;

System.out.println() ;

System.out.println("Sum of i,j and k in subOb: ") ;

subOb.sum() ;

}

}

虽然子类包括超类的所有成员,但是子类不能访问超类中被声明为private的成员。

class Box {

double width ;

double height ;

double depth ;

Box(Box ob) {

width = ob.width ;

height = ob.height ;

depth = ob.depth ;

}

Box() {

width = -1 ;

height = -1 ;

depth = -1 ;

}

Box(double len) {

width = height = depth = len ;

}

double volume() {

return width * height * depth ;

}

}

class BoxWeight extends Box {  // BoxWeight 继承了Box的所有特征(功能)

    // 在继承Box类后,子类BoxWeight也可以在不改变Box类的情况下独立完成成员的添加

 

    double weight ;  //为自己添加了一个变量成员

 

    BoxWeight (double w , double h , double d , double m ) {

       width = w ;

       height = h ;

       depth = d ;

       weight = m ;

    }

}

public class DemoBoxWeight {

public static void main(String args[]) {

BoxWeight mybox1 = new BoxWeight(10,20,15,34.3) ;

BoxWeight mybox2 = new BoxWeight(2,3,4,0.076) ;

double vol ;

vol = mybox1.volume() ;

System.out.println("Volume of mybox1 is " + vol) ;

System.out.println("Weight of mybox1 is " + mybox1.weight) ;

System.out.println() ;

vol = mybox2.volume() ;

System.out.println("Volume of mybox2 is " + vol) ;

System.out.println("Weight of mybox2 is " + mybox2.weight) ;

System.out.println();

}

}

超类的一个引用变量可以被任何从该超类派生的子类的引用赋值。

理解是引用变量的类型,而不是引用对象的类型;决定了什么成员可以被访问。

也就是说,当一个子类对象的引用被赋给一个超类引用变量时,你只能访问超类定义的对象的那一部分。这就是下例中为什么plainbox不能范文weight的原因,甚至是他引用了一个BoxWeight对象也不行。

因为超类不知道子类增加的属性(反之则知道)。

下例中,Box的引用访问weight域是不可能的,因为Box类没有定义。

class RefDemo {

public static void main(String args[]) {

// weightbox 是 BoxWeight对象的一个引用,

                   BoxWeight weightbox = new BoxWeight(3,5,7,8.37) ;

                   // plainbox是Box对象的一个引用,

                   Box plainbox = new Box() ;

double vol ;

vol = weightbox.volume() ;

System.out.println("Volume of weightbox is " + vol ) ;

System.out.println("Weight of weightbox is " + weightbox.weight) ;

System.out.println() ;

                  plainbox = weightbox ;  // weightbox的对象引用给plainbox赋值*

vol = plainbox.volume() ;

System.out.println("Volume of plainbox is " + vol) ;

//System.out.println("Weight of plainbox is  " + plainbox.weight) ;

                   // 不可以访问 weight,因为在超类中没有赋予Box.plainbox访问的权利

}

}

Java 继承初探的更多相关文章

  1. Java内部类初探

    Java内部类初探 之前对内部类的概念不太清晰,在此对内部类与外部类之间的关系以及它们之间的调用方式进行一个总结. Java内部类一般可以分为以下三种: 成员内部类 静态内部类 匿名内部类 一.成员内 ...

  2. Java继承与组合

    Java继承与组合 继承 java 中使用extends关键字表示继承关系,当创建一个类时,如果没有明确指出要继承的类,则是隐式地从根类Object进行继承. 子类继承父类的成员变量 子类能够继承父类 ...

  3. JAVA继承时构造函数的问题

    今天看到java继承部分时,关于构造函数是否继承以及如何使用时遇到了点问题,后来查找相关资料解决了. 下面是我个人的总结: 先创建一个父类,里面有两个构造函数: public class Jisuan ...

  4. Java继承和接口

    接口最关键的作用,也是使用接口最重要的一个原因:能上溯造型至多个基础类.使用接口的第二个原因与使用抽象基础类的原因是一样的:防止客户程序员制作这个类的一个对象,以及规定它仅仅是一个接口.这样便带来了一 ...

  5. Java继承的初始化

    /** * Created by xfyou on 2016/11/2. * Java继承的初始化 */ public class Beetle extends Insect { int k = pr ...

  6. Java—继承、封装、抽象、多态

    类.对象和包 1) 面向对象编程(Object Oriented Programming ,简称 OOP):20世纪70年代以后开始流行. 2) 结构化编程与面向对象编程的区别: A. 在结构化编程中 ...

  7. java继承关系中成员变量,构造方法,成员方法的关系

    Java继承中的成员关系 A:成员变量 a:子类的成员变量名称和父类中的成员变量名称不一样,这个太简单写那个名字就访问那个名字! b:子类的成员变量名称和父类中的成员变量名称一样,这个怎么访问呢? 子 ...

  8. JAVA继承时this和super关键字

    JAVA继承时this和super关键字 本文主要讨论在方法前使用this或super关键字时,编译器在什么地方查找对应的函数. 在子类中指定this关键字.首先在本类中查找,如果本类中找不到,再在父 ...

  9. JAVA 继承中的this和super

    学习java时看了不少尚学堂马士兵的视频,还是挺喜欢马士兵的讲课步骤的,二话不说,先做实例,看到的结果才是最实际的,理论神马的全是浮云.只有在实际操作过程中体会理论,在实际操作过程中升华理论才是最关键 ...

随机推荐

  1. 无限级分类及生成json数据

    第一步,先去数据库查询类别数据,然后交给生成json数据的函数处理,代码如下: /*生成类别JSON数据*/ public function wirteJson(){ $dataInfo = \thi ...

  2. 【实习项目记录】(一)加密算法MD5和RSA

    什么是md5加密? MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA ...

  3. 【Head First Java 读书笔记】(二)类与对象

    前篇当中,代码都放在main()里面,那根本不是面向对象的做法. 椅子大战(对象如何改变你的一生) 程序规格: 在图形接口画出四方形,圆形和三角形,当用户点选图形时,图形需要顺时针转360度并依据形状 ...

  4. Redis主从服务部署

    Redis__WindowsServer主从服务部署及调用实例       一.先谈谈单个Redis服务的安装         使用的redis是2.8.17版本,从官网下载解压缩后文件内容为:   ...

  5. 2014-4-2解决无法访问github和google的问题

    github是个好地方,但是上不去就蛋疼了. 今天github上不去,果断f12下,看下network,发现里面好多请求都是指向 github.global.ssl.fastly.net这个域名的,然 ...

  6. #随笔之java匿名内部类

    随笔之java匿名内部类 从今天起开始每日一篇技术博客,当然这只是我当天所学的一些随笔,里面或多或少会有理解不当的地方,希望大家多多指教,一起进步! 在讲匿名内部类之前,先讲讲内部类的一些概念. 1. ...

  7. angular 路由传参

    第一种:<a [routerLink]="['/product']" [queryParams]="{id: 1}">商品详情</a> ...

  8. SSM项目配置文件及其各项使用

    $说明: ·Spring 5  + Mybatis 3.4.5 +SpringMVC  ·使用druid数据库 ·使用log4j输出日志 $Spring 及其配置文件(部分) Spring官方网站:h ...

  9. 汇编工具安装二:RadASM的安装!

    已经配置好的汇编工具下载地址:http://download.csdn.net/detail/sunylat/9189543 RadASM也是一款汇编开发工具,网址:http://www.oby.ro ...

  10. day01.1-Python编译器的安装

    一. 在Windows环境中安装Python编译器     1. 访问Python官网https://www.python.org,下载适用于Windows环境的相关编译器版本: 2. 点击Pytho ...