`
lushuaiyin
  • 浏览: 704926 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

上转型对象

 
阅读更多

查找写资料对上转型对象做个了解:

假设B类是A类的子类或间接子类,当用子类B创建一个对象,并把这个对象的引用放到A类的对象中时,如
A a;
a=new B();

A a;
B b=new B();
a=b;
那么,称这个A类对象a是子类对象b的上转型对象(好比说:"老虎是哺乳动物").对象的上转型型对象实体是子类负责创建的,但上转型对象会失去原来的一些功能.

上转型对象具有如下特点:
1)上转型对象不能操作子类新增的成员变量(失掉了这部分属性),不能使用子类新增的方法(失掉了一些功能).
2)上转型对象可以操作子类继承或隐藏的成员变量,也可以使用子类继承的或重写的方法.
3)上转型对象操作子类继承或重写的方法时,就时通知对应的子类对象去调用这些方法.因此,如果子类重写了父类的某个方法后,对象的上转型对象调用这个方法时,一定是调用了这个重写的方法.
4)可以讲对象的上转型对象再强制转换到一个子类的对象,这时,该子类对象又具备了子类的所有属性和功能.


下面开始测试研究:

父类Computer.java(注意这里父类定义成了抽象类)

package org.test.parent;

public abstract class Computer {
	private String cpu="you choose";//可以给出默认值,也可以不给
	public String price;
	
	public void showPrice(){
		System.out.println("(父类方法)价格:"+getPrice());
	}
	
	public void showAppraise(String appraise){
		System.out.println("(父类方法)用户评价:"+appraise);
	}
	
	
	//showFatherSelf是private方法,子类对象不能使用,只有父类对象可以使用,而此父类是抽象类,不能实例化对象,所以这个方法只限于在此类中使用。
	//上转型对象是父类申请的对象,但是用子类实例化的,只能使用继承或重写的方法。private方法不能被继承。
	private void showFatherSelf(String name){
		System.out.println("(父类方法)showFatherSelf:"+name);
	}
	
	public abstract void showCpu();//抽象方法
	

	public String getCpu() {
		return cpu;
	}

	public void setCpu(String cpu) {
		this.cpu = cpu;
	}

	public String getPrice() {
		return price;
	}

	public void setPrice(String price) {
		this.price = price;
	}


}

子类ComputerLenovo.java

package org.test.parent;

public class ComputerLenovo extends Computer{
	

	@Override
	public void showCpu() {//实现父类中的抽象方法(重写)
		// TODO Auto-generated method stub
		System.out.println("Lenovo的cpu具体型号:"+getCpu());
	}
	
	public void showAppraise(String appraise){//重写父类中的非抽象方法
		System.out.println("Lenovo笔记本用户评价:"+appraise);
	}
	
	public void showNotebook() {//子类独有的方法
		// TODO Auto-generated method stub
		System.out.println("Lenovo笔记本的具体型号:"+getNotebook());
	}
	
	//和父类中的方法不同,这个方法是子类自己的,不是继承的,上转型对象不能调用。
	private void showFatherSelf(String name){
		System.out.println("(子类方法)showFatherSelf:"+name);
	}
	
	public String notebook;

	public String getNotebook() {
		return notebook;
	}

	public void setNotebook(String notebook) {
		this.notebook = notebook;
	}


}

测试类:

package org.test.parent;

public class TestCom {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// 方式一:声明子类对象,用子类来实例化。(常用的声明)
		ComputerLenovo child=new ComputerLenovo();
		// 方式二:声明父类对象,用子类来实例化。(这种方式就是上转型对象的声明)
		Computer father=new ComputerLenovo();
		
		
		System.out.println("--------------------child--------------------------------");
		
		System.out.println(child.getCpu()+"--"+child.getPrice()+"--"+child.getNotebook());
		child.setCpu("intel");
		child.setPrice("500元");
		child.setNotebook("ThinkPad");
		System.out.println(child.getCpu()+"--"+child.getPrice()+"--"+child.getNotebook());
		System.out.println("*********");
		
		child.showCpu();
		child.showPrice();//使用继承父类中的方法
		child.showNotebook();
		child.showAppraise("一般");
		
		System.out.println("#####对象访问######");
		System.out.println("child.price--"+child.price);
		System.out.println("child.notebook--"+child.notebook);
		
		System.out.println("---------------------father-------------------------------");
		System.out.println(father.getCpu()+"--"+father.getPrice());
		father.setCpu("CMD");
		father.setPrice("600元");
		System.out.println(father.getCpu()+"--"+father.getPrice());
		System.out.println("*********");
		father.showCpu();//上转型对象实际调用子类中子类中重写的方法
		father.showPrice();//上转型对象实际调用子类中子类中继承父类的方法(或者说调用父类自己的方法)
		father.showAppraise("很好");//上转型对象实际调用子类中子类中重写的方法(同上showCpu)
		//上转型对象不能调用子类中独有的方法showNotebook()
		
		System.out.println("#####对象访问######");
		System.out.println("father.price--"+father.price);//
		/*打印如下:
		 --------------------child--------------------------------
you choose--null--null
intel--500元--ThinkPad
*********
Lenovo的cpu具体型号:intel
(父类方法)价格:500元
Lenovo笔记本的具体型号:ThinkPad
Lenovo笔记本用户评价:一般
#####对象访问######
child.price--500元
child.notebook--ThinkPad
---------------------father-------------------------------
you choose--null
CMD--600元
*********
Lenovo的cpu具体型号:CMD
(父类方法)价格:600元
Lenovo笔记本用户评价:很好
#####对象访问######
father.price--600元

		 */
		/*
		 总上,上转型对象总结:
		1:声明父类对象,用子类来实例化。
		2:声明父类对象说明实际就是父类对象,但是这个对象的方法会去子类中寻找匹配。
		只要是在子类中继承或者重写的方法就符合匹配,在调用时,实际调用子类中匹配的方法。
		没有匹配的就使用自己的方法。
		同时,这个父类对象也只能访问子类继承的属性,子类中新增的属性只属于子类,跟父类无关;父类中私有的属性不会被继承,也访问不到。
		上转型对象本质是父类,方法却使用子类中继承或者重写的方法(如果此方法没有被继承或重写,就是用自己的这个方法)。
		
		 */
		
	}

}







分享到:
评论

相关推荐

    上转型对象体现多态

    ### 上转型对象体现多态 在Java编程语言中,“多态”是面向对象编程(OOP)的核心特性之一,它允许程序以一种通用的方式处理不同类型的对象。本文将深入探讨Java中的上转型对象如何体现多态性,并进一步分析面向对象...

    Java 中的上转型对象 使用

    在Java编程语言中,上转型对象(Upcasting)是一种面向对象编程的概念,它涉及到将子类对象赋值给父类类型的引用。这种做法允许我们使用父类引用来调用子类对象的方法,从而实现多态性。在Java中,所有类都隐式地...

    Java实现运用上转型对象抽象方法计算圆形或圆锥的面积、周长等成员变量

    Java实现运用上转型以及对象抽象方法计算圆形或圆锥的面积、周长等成员变量

    Java上转型和下转型对象

    Java 上转型和下转型对象 Java 中的上转型和下转型对象是对象之间的类型转换关系,用于描述父类和子类之间的继承关系。在 Java 中,我们可以通过上转型和下转型来实现对象之间的类型转换。 上转型对象 上转型对象...

    java中多态的使用实例

    在这个例子中,`myPet1`和`myPet2`虽然都是`Animal`类型,但它们实际上是`Dog`和`Cat`的实例。这就是多态性:我们可以通过相同的方法(`sound()`)来处理不同类型的对象,而具体的行为由运行时的对象类型决定。 ...

    java继承接口与泛型PPT教案学习.pptx

    对象的上转型对象的实体是子类负责创建的,但上转型对象会失去原对象的一些属性和功能。 对象的上转型对象具有以下特点: * 上转型对象不能操作子类声明定义的成员变量;也不能使用子类声明定义的方法。 * 上转型...

    java对象转型实例分析

    - 向下转型必须确保对象实际上是目标子类的实例,否则会导致 `ClassCastException`。 - 转型并不改变对象本身的类型,只是改变了引用的类型,因此转型前后对象的实际类型保持不变。 5. 示例代码分析: 在给定的代码...

    JAVA实验5知识点.pdf

    Java实验5主要涉及了接口的使用、抽象类与接口的区别以及上转型对象的概念。下面将对这些知识点进行详细的解释。 1. **接口的定义与实现** 接口在Java中是一种完全抽象的类型,它定义了一组方法的签名,但不包含...

    Java面向对象程序设计

    上转型对象是子类对象被当作父类对象使用,这允许子类对象可以被赋值给父类引用,实现多态性。 3.7 接口: 接口是Java中定义行为的规范,不包含具体实现。通过实现接口,类可以承诺提供特定的方法。接口是多继承的...

    Java程序设计与开发第3章类和对象.ppt

    **3.2.4 上转型对象**:上转型对象是指将子类对象引用赋值给父类类型的变量,实现多态性。 **3.2.5 关键字`this`和`super`**:`this`关键字引用当前对象,`super`则用于访问父类的成员。 **3.2.6 对象的撤销和清理...

    java2 使用教程(第三版) 实验指导 上机实践4 继承与接口

    然而,上转型对象只能调用父类中定义的方法和访问父类中的属性,无法访问子类特有的属性和方法。 **接口**在Java中扮演着另一种形式的继承,但它是一种行为上的继承。接口是一组抽象方法的集合,用于定义类必须实现...

    java的向上转型(学校教的)

    在主类中people类的声明对象分别作为Chinapeople和Americanpeople类对象的上转型对象,并让这个上转型对象调用showname方法。编写一个people类,该类有string类型的成员变量firstname和lastname来存放people对象的...

    java继承与接口实验三[借鉴].pdf

    - 上转型对象是父类引用指向子类实例的能力,这在实验中的`Employee`类及其子类`YearWorker`、`MonthWorker`、`WeekWorker`中得以体现。`Employee`定义了一个抽象方法`earnings()`,子类必须重写此方法以定义各自的...

    面向对象程序设计JAVA期末复习题选择、填空

    - **多态性**:同名方法在不同对象上有不同行为,可通过子类对象调用父类方法实现。 7. **方法的重载和覆盖**: - **方法重载**:同名方法,但参数列表不同,编译期确定调用。 - **方法覆盖**:子类方法覆盖父类...

    java向上转型向下转型

    向上转型是指将子类对象转换为父类对象,而向下转型是指将父类对象转换为子类对象。 向上转型(Upcasting) 向上转型是将子类对象转换为父类对象的过程。在 Java 中,我们可以将子类对象赋值给父类对象,这时 Java...

    Java面向对象程序设计面向对象的几个基本原则PPT教案学习.pptx

    + 抽象类声明的对象做上转型对象。 * 接口具有如下特点: + 接口中只可以有 public 权限的 abstract 方法,不能有非 abstract 方法。 + 接口由类去实现,即一个类如果实现一个接口,那么它必须重写接口中的 ...

    java复习资料.doc

    4. 上转型对象可以被强制转换回子类对象,从而恢复子类的所有特性。 多态性是Java中与继承相关的特性,当一个方法在父类中被子类重写时,不同类型的对象调用该方法可能会有不同的行为。这就是所谓的“同一操作作用...

    《UML系统分析与设计》考试模拟试卷2020.doc

    1. **上转型对象与多态**: - 上转型对象是在继承体系中,父类引用指向子类对象的过程。例如,`Animal`是`Dog`和`Cat`的父类,`Animal a = new Dog();` 或 `Animal b = new Cat();` 这里的`a`和`b`就是上转型对象。...

    java第一次实验报告.pdf

    上转型对象是指向上层父类的引用,可以指向任何子类的对象,这样可以实现多态性。 7. **接口回调**: 接口回调是指在运行时通过接口调用实现类的方法。这允许代码在运行时动态地决定调用哪个类的方法,增强了代码...

    完整版 Java初级教程 Java语言程序设计 第5章 继承与接口(共15页).ppt

    - 上转型对象是指父类引用指向子类对象,允许调用父类的方法和共享继承的成员变量,但无法访问子类特有的成员。 - 上转型对象可以通过强制类型转换转回子类对象,以便访问子类的所有成员。 7. 抽象类和抽象方法 ...

Global site tag (gtag.js) - Google Analytics