`
keke8614
  • 浏览: 46557 次
  • 性别: 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编程语言中,子类继承父类是一种常见的特性,它允许子类扩展或复用父类的功能。当我们创建一个子类对象并将其赋值给父类引用时,这种行为被称为向上转型(Upcasting)。这一过程是自动且安全的,因为子类对象...

    java中的继承(子类调用父类构造方法还不懂).doc

    在 Java 中,使用 `extends` 关键字可以实现继承关系,子类可以继承父类的属性和方法,并可以重写父类的方法。使用 `super` 关键字可以引用父类的成分,访问父类中定义的属性和方法。 在 Java 中,可以使用多态性来...

    论JAVA继承机制中父类与子类的关系

    文章围绕子类继承父类成员的过程、成员变量及方法的赋值、重写、覆盖等问题展开讨论,旨在帮助读者更好地理解Java继承中的重点与难点。 #### 关键词 - 继承机制 - 父类 - 子类 #### 一、超类的属性或方法在继承...

    JAVA 子类继承父类的范例 可直接运行

    如果需要在子类中访问父类的私有成员,则需要在父类中提供公共或受保护的方法来获取这些值。子类通过重写父类的方法,可以提供特定于子类的行为,也可以使用`super`关键字调用父类的版本。 关于继承的更多细节,...

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

    4. **访问器(getter和setter)**:在Java中,访问器(getter)用于获取类的私有成员变量的值,而设置器(setter)用于设置这些变量的值。这样做是为了实现封装,保护数据不被外部直接访问。例如,对于一个名为`age`...

    浅谈java继承中是否创建父类对象

    "浅谈java继承中是否创建父类对象" 在 Java 中,继承是一个非常重要的概念,它允许子类继承父类的属性和方法。但是,一个常见的问题是, Java 中的继承是否创建父类对象?在这篇文章中,我们将深入探讨这个问题,并...

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

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

    Java中static变量能继承吗

    此外,我们还可以看到,在子类中访问父类的 static 变量和方法时,实际上是访问父类的 static 变量和方法,而不是自己的。这是因为 static 变量和方法是属于类的,而不是实例的。 在多态方面,我们可以看到,变量时...

    java类的继承详解说明

    如果父类的成员变量是 int 类型,子类同名变量是 String 类型,同名的父类变量也会被覆盖。如果想访问父类的同名变量,可以使用 super 关键字或者父类类名。 重写父类的方法 子类除了增加新的成员变量和方法外,还...

    java成员变量覆盖问题

    成员变量的覆盖(有时会被误认为是“重写”)是理解Java继承机制的关键之一。本文将详细解释成员变量覆盖的基本概念,并通过示例代码来展示这一现象。 #### 成员变量覆盖的基本概念 成员变量覆盖是指在子类中声明...

    java 首先定义一个父类计算如下表达式:

    继承机制使得子类可以直接访问父类的方法和属性,但也可以覆盖或扩展它们的功能。 #### 2. 继承与重写 ```java class A extends S { float x; // 构造函数 A(int b, float c) { n = b; x = c; } // 成员...

    Java中子类.pdf

    Java语言中的子类是指继承父类的类,子类继承父类的所有状态和行为,可以修改父类的状态或覆盖父类的行为,并添加新的状态和行为。子类的创建是通过使用extends关键词来指示所继承的父类。 子类的特点: 1. 继承...

    再次详细说明在继承中的程序执行顺序,子类与父类到底哪个先执行

    - 在Java中,一个类只能直接继承一个父类,但可以实现多个接口。接口中的方法默认是抽象的,所以子类必须提供这些方法的实现。在Python中,通过多重继承可以同时继承多个父类。 综上所述,程序执行顺序的基本原则...

    Java子类的继承性

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

    java 使用类作为成员变量

    在Java编程语言中,类作为成员变量是一种常见的设计模式,它允许我们将一个对象实例嵌套在另一个类的内部,以此来实现数据封装和模块化。这种做法有助于组织代码,提高可读性和可维护性。下面将详细介绍如何在Java中...

    java中与继承有关的程序内存分析

    在Java编程语言中,继承是面向对象特性的重要组成部分,它允许一个类(子类)从另一个类(父类)继承属性和方法。这种机制有助于代码重用和构建复杂的类层次结构。当我们谈论“java中与继承有关的程序内存分析”时,...

    Java程序设计课件:第四章 继承与多态.ppt

    super 关键字可以用来访问父类的成员变量和方法。 本章主要讲解了 Java 中的继承和多态机制,包括继承的基本知识、父类和子类的关系、继承的好处等。此外,还讲解了 Java 中的访问权限、final 关键字和 super ...

    继承的小例子

    在上述代码中,`Child`类就是`Parent`类的子类,它可以直接访问`Parent`类中的`commonVariable`变量和`commonMethod()`方法。这样,我们就可以在不重复编写相同代码的情况下,为不同的类提供共有的功能。 然而,有...

    Java 实现继承实例代码

    这种设计模式有助于代码重用,使得子类可以继承父类的属性和方法,并且可以添加新的功能或覆盖已有的行为。本实例将通过`Tryextend.java`文件展示如何在Java中实现继承。 首先,让我们理解继承的基本语法。在Java中...

Global site tag (gtag.js) - Google Analytics