基于java中子类的继承性的应用介绍

1,继承的定义

子类的成员中有一部分是子类自己申明定义的,另一部分是从他的父类继承的。子类继承父类的成员变量作为自己的一个成员变量,就好像他们是在子类中直接

申明一样,可以被子类中自己的任何实例方法操作。也就是说,一个子类继承的成员应当是这个类的完全意义的成员,如果子类中申明的实例方法不能操作父类

的某个成员变量,该成员变量就没有被子类继承,子类继承父类的方法作为子类中的方法,就像他们是在子类中直接声一样,可以被子类中自己声明的刃虎实例

方法调用。

2.子类父类在一个包中的情况

子类可以继承父类中的除了private的成员变量和方法,作为自己的成员变量和方法。继承的成员变量和方法的访问权限是不变的。

/test/src/com/b510/Parent.java


代码如下:

package com.b510;

/**
  * @author Hongten
  *
  * @time 2012-3-13 2012
  */
 public class Parent {
     private int numbera = 10;
     protected int numberb = 20;

/**
      * 友元函数sum()
 */
     void sum() {
         numberb = numbera + numberb;
         System.out.println(numberb);
     }

/**
      * 获得numbera,此方法是private
      *
      * @return numbera
 */
     private int getNumbera() {
         System.out.println(numbera);
         return numbera;
     }

/**
      * 此方法是public类型的
 */
     public void print() {
         System.out.println("numberb+numbera=" + (numberb + numbera));
     }

/**
      * 此方法是protected类型的
 */
     protected void say() {
         System.out.println("Hello,i'm parent class!");
     }
 }

/test/src/com/b510/ParentAndSubClass.java


代码如下:

package com.b510;

/**
  * @author Hongten
  *
  * @time 2012-3-13 2012
  */
 public class ParentAndSubClass {
     public static void main(String[] args) {
         SubClass sub = new SubClass();
         // 继承父类中的方法
         sub.say();
         sub.sum();
         sub.print();
         // 子类自己的方法
         sub.proFun();
         sub.youYuan();
     }

}

/test/src/com/b510/SubClass.java


代码如下:

package com.b510;

/**
  * @author Hongten
  *
  * @time 2012-3-13 2012
  */
 public class SubClass extends Parent {

/**
      * 友元方法
 */
     void youYuan() {
         System.out.println("子类不能继承numbera,但能继承numberb=" + numberb);
         System.out.println("这是子类中的友元方法");
     }

/**
      * private方法
 */
     private void priFun() {
         System.out.println("这是private方法");
     }

/**
      * protected方法
 */
     protected void proFun() {
         System.out.println("子类中可以继承numberb=" + numberb);
     }

}

运行结果:


代码如下:

Hello,i'm parent class!
 30
 numberb+numbera=40
 子类中可以继承numberb=30
 子类不能继承numbera,但能继承numberb=30
 这是子类中的友元方法

总结:子类和父类在同一个包中的时候,子类不能继承父类的含有private的变量和方法。

3.子类和父类不在同一个包的情况
/test/src/com/Parent.java


代码如下:

package com;

/**
  * @author Hongten
  *
  * @time 2012-3-13 2012
  */
 public class Parent {
     private int numbera = 10;
     protected int numberb = 20;

/**
      * 友元函数sum()
 */
     void sum() {
         numberb = numbera + numberb;
         System.out.println(numberb);
     }

/**
      * 获得numbera,此方法是private
      *
      * @return numbera
 */
     private int getNumbera() {
         System.out.println(numbera);
         return numbera;
     }

/**
      * 此方法是public类型的
 */
     public void print() {
         System.out.println("numberb+numbera=" + (numberb + numbera));
     }

/**
      * 此方法是protected类型的
 */
     protected void say() {
         System.out.println("Hello,i'm parent class!");
     }
 }

/test/src/com/b510/ParentAndSubClass.java


代码如下:

package com.b510;

/**
  * @author Hongten
  *
  * @time 2012-3-13 2012
  */
 public class ParentAndSubClass {
     public static void main(String[] args) {
         SubClass sub = new SubClass();
         // 继承父类中的方法
         sub.say();
         sub.print();
         // 子类自己的方法
         sub.proFun();
         sub.youYuan();
     }

}

/test/src/com/b510/SubClass.java


代码如下:

package com.b510;

import com.Parent;

/**
  * @author Hongten
  *
  * @time 2012-3-13 2012
  */
 public class SubClass extends Parent {

/**
      * 友元方法
 */
     void youYuan() {
         System.out.println("子类不能继承numbera,但能继承numberb=" + numberb);
         System.out.println("这是子类中的友元方法");
     }

/**
      * private方法
 */
     private void priFun() {
         System.out.println("这是private方法");
     }

/**
      * protected方法
 */
     protected void proFun() {
         System.out.println("子类中可以继承numberb=" + numberb);
     }

@Override
     protected void say() {
         System.out.println("这是重写父类的protected方法,say(),还可以得到numberb=" + numberb);
     }
 }

运行结果:


代码如下:

1 这是重写父类的protected方法,say(),还可以得到numberb=20
2 numberb+numbera=30
3 子类中可以继承numberb=20
4 子类不能继承numbera,但能继承numberb=20
5 这是子类中的友元方法

总结:子类和父类不在同一个包,子类可以继承protected,public变量和方法,继承的成员或方法的访问权限不变,但子类不能继承父类的友好(友元)变量和友好(友元)方法。

(0)

相关推荐

  • Java封装、继承、多态三大特征的理解

    首先先简单的说一下其3大特性的定义: 封装:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别.将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成"类",其中数据和函数都是类的成员.封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的访问权限来使用类的成员.封装的基本要求是: 把所有的属性私有化,对每个属性提供getter和setter方法,如果有一个带参的

  • JAVA中阻止类的继承(官方和非官方)

    官方办法 JAVA语言提供的一个关键字"FINAL"可以用来履行该任务.看看下面的源代码范例: 复制代码 代码如下: //FinalDemo.java public final class FinalDemo { } 下面让我们来制作另一个类,它将会继承上面声明的类.JAVA语言提供的"EXTENDS"关键字将能够使得一个类继承于一个现有的类. 复制代码 代码如下: //FinalDemo2.java public class FinalDemo2 extends

  • javascrip关于继承的小例子

    复制代码 代码如下: //继承function Person(name,sex){   this.name=name;   this.sex=sex;}Person.prototype.sayName=function(){   alert(this.name);}Person.prototype.saySex=function(){   alert(this.sex);}function Worker(name,sex,job){    //继承person类     Person.call(

  • Java基础教程之继承详解

    继承(inheritance)是面向对象的重要概念.继承是除组合(composition)之外,提高代码重复可用性(reusibility)的另一种重要方式.我们在组合(composition)中看到,组合是重复调用对象的功能接口.我们将看到,继承可以重复利用已有的类的定义. 类的继承 我们之前定义类的时候,都是从头开始,详细的定义该类的每一个成员.比如下面的Human类: 复制代码 代码如下: class Human {      /**      * accessor      */    

  • java中子类继承父类,程序运行顺序的深入分析

    我们经常在项目中使用继承,但是往往不太明白,程序运行的顺序以及原理,尤其是使用上转型对象的时候,以及父类子类中都有static变量和方法时,不知道先运行谁.我也是写了一个例子.总结了一下. 复制代码 代码如下: 父类:public class TestStatic { public static String name="china"; {       System.out.println("========方法体========");    } static{  

  • 浅谈Java 对于继承的初级理解

    概念:继承,是指一个类的定义可以基于另外一个已存在的类,即子类继承父类,从而实现父类的代码的重用.两个类的关系:父类一般具有各个子类共性的特征,而子类可以增加一些更具个性的方法.类的继承具有传递性,即子类还可以继续派生子类,位于上层的类概念更加抽象,位于下层的类的概念更加具体. 1.定义子类: 语法格式 [修饰符] class 子类名 extends 父类名{ 子类体 } 修饰符:public private protected default 子类体是子类在继承父类的内容基础上添加的新的特有内

  • 解析Java继承中方法的覆盖和重载

    方法的覆盖 在类继承中,子类可以修改从父类继承来的方法,也就是说子类能创建一个与父类方法有不同功能的方法,但具有相同的名称.返回值类型.参数列表. 如果在新类中定义一个方法,其名称.返回值类型和参数列表正好与父类中的相同,那么,新方法被称做覆盖旧方法. 参数列表又叫参数签名,包括参数的类型.参数的个数和参数的顺序,只要有一个不同就叫做参数列表不同. 被覆盖的方法在子类中只能通过super调用. 注意:覆盖不会删除父类中的方法,而是对子类的实例隐藏,暂时不使用. 请看下面的例子: public c

  • java教程之java继承示例详解

    什么是继承(extends)? 继承是:新定义的类是从已有的类中获取属性和方法的现象. 这个已有的类叫做父类, 从这个父类获取属性和方法的类叫做子类. ExtendsDemo1.java 复制代码 代码如下: /*什么是继承*/public class ExtendsDemo1 {    public static void main(String[] args) {        Truck t = new Truck();        t.size = 100;           //不

  • 基于java中子类的继承性的应用介绍

    1,继承的定义 子类的成员中有一部分是子类自己申明定义的,另一部分是从他的父类继承的.子类继承父类的成员变量作为自己的一个成员变量,就好像他们是在子类中直接 申明一样,可以被子类中自己的任何实例方法操作.也就是说,一个子类继承的成员应当是这个类的完全意义的成员,如果子类中申明的实例方法不能操作父类 的某个成员变量,该成员变量就没有被子类继承,子类继承父类的方法作为子类中的方法,就像他们是在子类中直接声一样,可以被子类中自己声明的刃虎实例 方法调用. 2.子类父类在一个包中的情况 子类可以继承父类

  • 基于Java中的StringTokenizer类详解(推荐)

    StringTokenizer是字符串分隔解析类型,属于:Java.util包. 1.StringTokenizer的构造函数 StringTokenizer(String str):构造一个用来解析str的StringTokenizer对象.java默认的分隔符是"空格"."制表符('\t')"."换行符('\n')"."回车符('\r')". StringTokenizer(String str,String delim)

  • 基于Java中字符串内存位置详解

    前言 之前写过一篇关于JVM内存区域划分的文章,但是昨天接到蚂蚁金服的面试,问到JVM相关的内容,解释一下JVM的内存区域划分,这部分答得还不错,但是后来又问了Java里面String存放的位置,之前只记得String是一个不变的量,应该是要存放在常量池里面的,但是后来问到new一个String出来应该是放到哪里的,这个应该是放到堆里面的,后来又问到String的引用是放在什么地方的,当时傻逼的说也是放在堆里面的,现在总结一下:基本类型的变量数据和对象的引用都是放在栈里面的,对象本身放在堆里面,

  • 基于Java中Math类的常用函数总结

    Java中比较常用的几个数学公式的总结: //取整,返回小于目标函数的最大整数,如下将会返回-2 Math.floor(-1.8): //取整,返回发育目标数的最小整数 Math.ceil() //四舍五入取整 Math.round() //计算平方根 Math.sqrt() //计算立方根 Math.cbrt() //返回欧拉数e的n次幂 Math.exp(3); //计算乘方,下面是计算3的2次方 Math.pow(3,2); //计算自然对数 Math.log(); //计算绝对值 Mat

  • 基于java中cookie和session的比较

    cookie和session的比较 一.对于cookie: ①cookie是创建于服务器端 ②cookie保存在浏览器端 ③cookie的生命周期可以通过cookie.setMaxAge(2000);来设置,如果没有设置setMaxAge, 则cookie的生命周期当浏览器关闭的时候,就消亡了 ④cookie可以被多个同类型的浏览器共享  可以把cookie想象成一张表 比较: ①存在的位置: cookie 存在于客户端,临时文件夹中 session:存在于服务器的内存中,一个session域对

  • 基于java中的PO VO DAO BO POJO(详解)

    一.PO:persistant object 持久对象,可以看成是与数据库中的表相映射的ava对象. 最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合PO中应该不包含任何对数据库的操作. 二.VO:value object值对象.通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已.但应是抽象出的业务对象可以和表对应也可以不这根据业务的需要 三.DAO:data access object 数据访问对象,此对象用于访问数据库.通常和PO结合使用,DAO中包含了各种

  • 基于Java中的数值和集合详解

    数组array和集合的区别: (1) 数值是大小固定的,同一数组只能存放一样的数据. (2) java集合可以存放不固定的一组数据 (3) 若程序事不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用 数组转换为集合: Arrays.asList(数组) 示例: int[] arr = {1,3,4,6,6}; Arrays.asList(arr); for(int i=0;i<arr.length;i++){ System.out.println(arr[

  • 基于Java中对域和静态方法的访问不具有多态性(实例讲解)

    1.将方法调用同方法主体关联起来被称为 2.编译期绑定(静态)是在程序编译阶段就确定了引用对象的类型 3.运行期绑定(动态绑定)是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法 4.除了static方法和final方法(private方法属于final方法),其他所有方法都是后期绑定,Java中所有的方法都是通过动态绑定来实现多态 5.访问某个域的行为不具有多态性 package polymorphism; class SuperField { public int fi

  • 基于Java中进制的转换函数详解

    十进制转成十六进制: Integer.toHexString(int i) 十进制转成八进制 Integer.toOctalString(int i) 十进制转成二进制 Integer.toBinaryString(int i) 十六进制转成十进制 Integer.valueOf("FFFF",16).toString() 八进制转成十进制 Integer.valueOf("876",8).toString() 二进制转十进制 Integer.valueOf(&qu

  • 基于java中byte数组与int类型的转换(两种方法)

    java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形int转换成byte数组,同时如何把一个长度为4的byte数组转换为int类型.下面有两种方式. public static byte[] int2byte(int res) { byte[] targets = new byte[4]; targets[0] = (byte) (res & 0xf

随机推荐