java向上转型的问题

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
class A{
private String s1 = "A1" ;
public String s2 = "A2" ;
public String get(){
return s2 ;
}
public String getS1(){
return s1 ;
}

}
class B extends A{
private String s1 = "B1" ;
public String s2 = "B2" ;
public String get(){
return s2 ;
}
public String getS1(){
return s1 ;
}
}

public class test{
public static void main(String[] args){
A b = new B() ;
System.out.println(b.get()) ;
System.out.println(b.getS1()) ;
System.out.println(b.s2) ;
}
}

结果:
B2
B1
A2

结论:
类在向上转型后,private的属性依然是子类的属性,因为private不能直接访问,需要提供对外方法,而方法在向上转型后依然是子类的方法,所以private的属性不会改变而非private的属性在向上转型后都会改变.方法在向上转型后是不会改变的.
总而言之,向上转型后,直接访问的属性会转型成基类的属性,方法还是子类的方法,通过子类的方法返回的字段值还是子类的值!

时间: 2024-10-13 18:42:00

java向上转型的问题的相关文章

Java向上转型和向下转型(附具体样例)

                                            Java向上转型和向下转型(附具体样例) 熬夜整理的关于Java向上和向下转型的样例,很的通俗易懂哦~~~~ 一.向上转型 package com.sheepmu; class Animal { public void eat() { System.out.println("父类的 eating..."); } } class Bird extends Animal { @Override publ

Java向上转型和向下转型(附详细例子)

                                            Java向上转型和向下转型(附详细例子) 熬夜整理的关于Java向上和向下转型的例子,非常的通俗易懂哦~~~~ 一.向上转型 package com.sheepmu; class Animal { public void eat() { System.out.println("父类的 eating..."); } } class Bird extends Animal { @Override pub

java 向上转型(upcasting)和向下转型(downcasting)区别举例详解

今天下午小龙在练习instanceof用法时突然想到java的upcating 和 downcasting 好像与此有关联,于是自己写了一个相关的案例,在此与众位看到的亲们分享一下,希望能帮到正在学习的伙伴们. package com.instanceoftest; /**  java向上转型和向下转型,以及用instanceof方法来防止向下转型错误 * 接口说明 *interface方式的实现中,Demo只能够有静态的不能被修改的数据成员(也就是必须是static final 的,不过在in

java向上转型和向下转型

一直不太明白这个概念,于是在网上搜索了一下文章转载自:http://www.cnblogs.com/fickleness/p/3149011.html 转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求,则子类可以重写父类中的方法来加以扩展. 向上转型:子类引用的对象转换为父类类型称为向上转型.通俗地说就是是将子类对象转为父类对象.此处父类对象可以是接口 向下转型:父类引用的对象转换为子类类型称为向下转型. 前者

Java向上转型注意事项

继承.接口:Java子类中如果含有父类中不包含的变量与方法,子类对象向上转型时就是丢失这些变量和方法. 1 interface SuperClass{ 2 int i = 2; 3 void f() ; 4 } 5 class SubClass implements SuperClass{ 6 int i = 1 ; 7 int j = 2 ; 8 public void f(){ 9 System.out.println("SubClass.f()"); 10 } 11 public

(原)java 向上转型中,任何域的访问操作都是由编译器解析,不是多态

最近在向java发力,学习学习了下.看到了多态这一节,书中有个比较好的例子,所以就准备写下来,记录下来: 1 package dynamic_binding01; 2 3 public class dynamic_binding01 { 4 5 public static void main(String[] args) { 6 // TODO Auto-generated method stub 7 Super super1=new Sub(); 8 System.out.println("s

Java向上转型的意义

1 比如我这个程序 2 public class Testjava{ 3 public static void main(String args[]) 4 { 5 fun(new Student()); 6 fun(new Allen()); 7 8 } 9 public static void fun(Person p) 10 { 11 p.fun2(); 12 if (p instanceof Student) 13 { 14 Student s=(Student)p; 15 s.fun3(

java 向上转型和向下转型

学习向上转型和向下转型怎么用没多难,但是为什么那样用,我搞了很多次没弄明白.没弄明白的原因是平时学习时之看例子,而例子一般都比较简单,没有对象之间的调用,一般就是一个对象调用自己的方法. 首先看下怎么用转型. 要转型,首先要有继承.继承是面向对象语言中一个代码复用的机制,简单说就是子类继承了父类中的非私有属性和可以继承的方法,然后子类可以继续扩展自己的属性及方法. 向上转型:子类对象转为父类,父类可以是接口.公式:Father f = new Son();Father是父类或接口,son是子类.

JAVA向上转型后的方法调用问题

Base b = new Sub ( ) ;JAVA基类变量接收子类对象的引用后,会向上转型: 此时: 1.变量 b 默认可以访问的方法依然是 基类中自身独有的 public和 protected 方法 ,private 方法不可被外界直接访问,这点始终不变[ 相当于Base b = new Base() ] 2.Sub 自身独有而 Base中没有的方法(无论是public,protected还是private ) ,变量 b 都不可以访问 3.但如果 Sub有覆盖Base中的 public或p