`
keke8614
  • 浏览: 45535 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

java中到底是继承父类变量还是访问父类变量

    博客分类:
  • Java
阅读更多

 对于访问父类的变量我们到底应该如何做??

1.  直接访问通过方法访问父类的变量:

package com.huawei.test
public class ProtectedVariable extends Parent{	
	public static void main(String[] args) {
		Parent v1 = new ProtectedVariable();
		v1.setName("keke8614");
		System.out.println(v1.getName());
		Parent v2 = new ProtectedVariable();
		v2.setName("keke8615");
		System.out.println(v2.getName());
		System.out.println(v1.getName());
	}
}
class Parent{
	private String name;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

 2. 第二种方法通过继承访问父类的变量:

package com.huawei.test;
public class ProtectedVariable extends Parent{
	public static void main(String[] args) {
		Parent v1 = new ProtectedVariable();
		v1.name = "keke8614";
		System.out.println(v1.name);
		Parent v2 = new ProtectedVariable();
		v2.name = "keke8615";
		System.out.println(v1.name);
		System.out.println(v2.name);
	}
}
class Parent{
	protected String name;
}

       

       通过上面的方法我们都可以访问到变量,那么到底哪种访问符合便准的编程规范呢,我很是疑惑?

这是我在看一些源码中时发现的。而源码中更多的是以下的编码格式

 

package com.huawei.test;
public class ProtectedVariable extends Parent{	
	public static void main(String[] args) {
		Parent v1 = new ProtectedVariable();
		v1.setName("keke8614");
		System.out.println(v1.getName());
		Parent v2 = new ProtectedVariable();
		v2.setName("keke8615");
		System.out.println(v2.getName());
		System.out.println(v1.getName());
	}
}
class Parent{
	protected String name;
	public String getName() {
		//可能对name进行操作
		return name;
	}
	public void setName(String name) {
		//可能对name进行操作
		this.name = name;
	}
}

 

    这样设计到底起到了什么好处啊??希望给予正解......

 

1
2
分享到:
评论
7 楼 ansjsun 2013-02-03  
变量这个东西..可变的在继承中少用...你可以写抽象方法...建议多用接口..少用抽象类...用抽象类..少用变量..用变量...就写全了....get set 都带..不要让子类去修改..否则代码会很乱
6 楼 jackra 2013-02-02  
如果如文中所述
此处不应用继承
而应使用聚合

private在继承体系确可以体现继承线上的特色。
但如果特色需要被子类使用,private的限制应转变为protected。

此问题是指:使用面向对象的语言,却不用面向对象的思想做事。
5 楼 audrey1226 2013-02-01  
keke8614 写道
ohunbeyond 写道
keke8614 写道
tangzhibin 写道
保护私有变量、封装数据,将对变量的访问与变量本身区分开;
而且还可以在getter和setter方法中做一些数据转换,而不直接操作变量本身,对外部调用者不必关心

如果是这样,那protected对父类属性就失去了意义,是不是有更好的解释呢?


这种类设计的目的就是用来被继承的,用protected正合适!

单只用protected是不够的,如果这里不是String对象,而是一个OutputStream对象呢,我们需要子类可以根据自己的需求初始话OutputStream,那此时怎么抉择呢?


子类也需要初始父类的变量, 不知道我理解的正确不正确, 我写了个小例子

package entity;

import java.io.OutputStream;

import entity.Father;

public class Son extends Father {
   private final OutputStream son;

   public Son(OutputStream father, OutputStream son) {
      super(father);
      this.son = son;
   }

   class Father {
      protected final OutputStream father;

      public Father(OutputStream father) {
         this.father = father;
      }
   }
}
4 楼 keke8614 2013-02-01  
ohunbeyond 写道
keke8614 写道
tangzhibin 写道
保护私有变量、封装数据,将对变量的访问与变量本身区分开;
而且还可以在getter和setter方法中做一些数据转换,而不直接操作变量本身,对外部调用者不必关心

如果是这样,那protected对父类属性就失去了意义,是不是有更好的解释呢?


这种类设计的目的就是用来被继承的,用protected正合适!

单只用protected是不够的,如果这里不是String对象,而是一个OutputStream对象呢,我们需要子类可以根据自己的需求初始话OutputStream,那此时怎么抉择呢?
3 楼 ohunbeyond 2013-02-01  
keke8614 写道
tangzhibin 写道
保护私有变量、封装数据,将对变量的访问与变量本身区分开;
而且还可以在getter和setter方法中做一些数据转换,而不直接操作变量本身,对外部调用者不必关心

如果是这样,那protected对父类属性就失去了意义,是不是有更好的解释呢?


这种类设计的目的就是用来被继承的,用protected正合适!
2 楼 keke8614 2013-02-01  
tangzhibin 写道
保护私有变量、封装数据,将对变量的访问与变量本身区分开;
而且还可以在getter和setter方法中做一些数据转换,而不直接操作变量本身,对外部调用者不必关心

如果是这样,那protected对父类属性就失去了意义,是不是有更好的解释呢?
1 楼 tangzhibin 2013-02-01  
保护私有变量、封装数据,将对变量的访问与变量本身区分开;
而且还可以在getter和setter方法中做一些数据转换,而不直接操作变量本身,对外部调用者不必关心

相关推荐

    Java中的方法和变量在继承时的覆盖问题

    变量和方法覆盖和隐藏的不同:一个类的实例无法通过使用全局名或者强制自己转换为父类型,以访问父类中被隐藏的方法,然而强制转换子类为父类型之后,可以访问父类中被隐藏的变量。另外静态方法不能覆盖父类的实例...

    JAVA经典继承与父类调用 geter、seter访问器 构造器

    代码中设计了各个类的基类,设置私有成员变量,利用构造器对成员变量初始化,用geter、seter访问器设置、获取成员变量的值。继承基类并创建对象,在子类中调用父类方法。

    Java子类的继承性

    那么子类继承了父类的protected、public成员变量作为子类的成员变量,并且继承了父类的protected、public方法,继承的成员或方法的访问权限保持不变,但子类不能继承父类的友好变量和友好方法。  源代码: public...

    java中继承的使用案例

    (2)学生类Student继承Person,增加了学号信息,有两个构造方法Student()和Student(姓名,性别,年龄,学号),调用父类Person的构造方法对父类部分进行构造,在Student()中,默认学号为空字符串,在Student...

    《java面向对象程序设计-继承和多态》教案.doc

    除了构造方法之外,父类的所有 方法和属性都被子类的对象继承 多态性是不同的实例对象以不同的方式对相同的信息作出不同的表现 访问修饰符用于确定访问类成员的方式 Java 常用修饰符有 static、final、abstract 接口...

    Java基础知识总结(总共六章)

    JAVA 基础知识总结 第一章 Java 入门 ...在java 中允许多层继承,在继承中子类不能访问父类中的私有操作,而 只能继承全部的公有操作,对于私有内容不能直接访问,但是可以通过 其他途径访问 在实例化子类对象时

    Java开发技术大全(500个源代码).

    deriveClass.java 子类访问父类变量示例 getLinePara.java 获取命令行参数示例 hasStaticMethod.java 静态成员方法示例 hasStatMember.java 静态成员变量示例 HelloNative.c 用C写的一个小程序 HelloNative....

    Java继承时构造函数的调用

    Java继承时构造函数的调用, java面向对象特征: 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用...

    Java笔试题大汇总

    子类不能继承父类中访问权限为private的成员变量和方法,子类可以重写父类的方法,及命名与父类同名的成员变量。 子类通过隐藏父类的成员变量和重写父类的方法,把父类的状态和行为改变为自身的状态和行为。注意:...

    大连理工大学Java小学期华为云作业答案

    子类使用susper访问和调用被子类隐藏的成员变量和方法,输入一个数,对输入的数字计算平均数和1/2倍数。对输入的字符串进行打印输出 子类继承父类,使用super调用父类构造方法,根据提示输入字符串,输出结果。 ...

    《Java程序设计案例教程》教学课件05深入Java面向对象.pptx

    能够在MyEclipse IDE中定义子类继承父类。 2.能够在子类的定义中使用super关键字及重写父类的成员方法。 3.能够使用instanceof运算符判断对象类型。 4.能够在MyEclipse IDE中定义抽象类及定义子类继承抽象父类。 5....

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    继承父类(汽车)的所有状态和行为,同时增加自己的状态和行为。通过父类和子类,我们实 现了类的的层次,可以从最一般的类开始,逐步特殊化,定义一系列的子类。同时,通过继 承也实现了代码的复用,使程序的复杂性...

    Java继承后访问成员的特点.docx

    对象访问成员变量时,会先在子类中查找有没有定义对应的变量,若子类中存在就会就近使用子类中的变量,若子类中没有定义就会沿着继承关系往上找有没有定义相应的变量,若父类中也没有则编译不通过。代码示例:

    赛杰IT -java期末测试题 笔试部分

    (4)一个子类继承父类,子类不可以继承父类中访问权限设定为 的变量和方法. A)public B) protected C)private D)未修饰 (5) 下列叙述正确的是 A) 在类中的构造方法的名字与类的名字相同, 而且不能重载 B) 在...

    java试题经典考试试题

    派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即...

    JAVA基础知识精华总结 收藏

    (1) 类可以没有构造方法,但如果有多个构造方法,就应该要有默认的构造方法,否则在继承此类时,需要在子类中显式调用父类的某一个非默认的构造方法了。 (2) 在一个构造方法中,只能调用一次其他的构造方法,并且...

    JAVA面试题最全集

    9.Java中访问数据库的步骤,Statement和PreparedStatement之间的区别。 10.找出下列代码可能存在的错误,并说明原因: 二、JSP&Servlet技术 1.描述JSP和Servlet的区别、共同点、各自应用的范围 2.在Web开发中...

    java三大特性说明

     允许存在父子类的关系,一个子类有且只有一个直接的父类(Java中的继承是类之间的单继承.) 当在内存形成类的信息绑定的时候不会出现多个交叉点,结构的清晰程度较高.Java本身的运行效率较低,只能达到C语言的...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    10.1.7 Java中的单继承 248 10.1.8 Java中的类图 249 10.1.9 万类之祖——Object类 250 10.2 子类对象?父类对象? 251 10.2.1 父随子行 251 10.2.2 当构造方法遇到继承 254 10.2.3 记得给类一个无参数的构造...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    10.1.7 Java中的单继承 248 10.1.8 Java中的类图 249 10.1.9 万类之祖——Object类 250 10.2 子类对象?父类对象? 251 10.2.1 父随子行 251 10.2.2 当构造方法遇到继承 254 10.2.3 记得给类一个无参数的构造...

Global site tag (gtag.js) - Google Analytics