`
lushuaiyin
  • 浏览: 676331 次
  • 性别: 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中向上转型对象体现的多态,以及面向对象思想

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

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

    Java 中的上转型对象 使用

    NULL 博文链接:https://tonysmith.iteye.com/blog/1436395

    java中多态的使用实例

    主要java中接口,继承以及抽象等基础内容的实例,实初学者能刚好的理会多态的具体含义

    java对象转型实例分析

    主要介绍了java对象转型的概念及用法,并以实例形式进行了较为详细的介绍,需要的朋友可以参考下

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

    一、Java中什么是上转型对象, 上转型对象如何体现多态?(10分) 二、UML的用户可以随意对UML进行任意形式的扩展吗?说明理由。(10分) 三、简述用例之间的包含关系和扩展关系的相同点和不同点。(10分) 四、简述...

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

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

    Java上转型和下转型对象

    给大家讲述了Java上转型和下转型对象的详细用法以及相关的代码分享,有兴趣的朋友可以学习下。

    Java 2实用教程(第三版)实验指导与习题解答

    实验2 上转型对象 17 实验3 接口回调 18 上机实践5 字符串、时间与数字 19 实验1 String类的常用方法 19 实验2 比较日期的大小 21 实验3 处理大整数 22 上机实践6 组件及事件处理 23 实验1 算术测试 23 实验2 信号...

    java2实验实用模板代码

    实验2 上转型对象 19 实验3 接口回调 20 上机实践5 字符串、时间与数字 22 实验1 STRING类的常用方法 22 实验2 比较日期的大小 24 实验3 处理大整数 25 上机实践6 图形用户界面设计(1) 27 实验2 信号灯 28 实验3...

    第二周总结1

    第二周第一章一、对象的上转型对象(以及下转型对象) 1、上转型对象,父类引用指向子类对象,这样父类的引用可以在调用自己的被重写的方法时会调用引用向下转型的子类的

    Java2实用教程.rar

    4 9对象的上转型对象 4 10多态性 4 11abstract类和abstract方法 4 12super关键字 4 13接口 4 13 1接口的声明与使用 4 13 2理解接口 4 13 3接口回调 4 13 4接口做参数 4 14内部类 4 15匿名类 4 15 1和类有关的匿名类 ...

    国有企业数字化转型报告

    困难、行业比较的基础上,增加了对转型动因、转型顺序、转型模式、转型必选 项、转型资源投入情况、转型期待等方面的调研,受访者行业分布也更加均衡。 整体上看,本次调研是对2021年调研的发展与深入,对国有企业...

    JAVA面向对象程序设计

    一、编写一个应用程序,实现下列要求: 1.描述一个接口,其中含有一个求面积的方法 2.描述三角形类,且实现上述接口 3.采用继承描述直角三角形类,增加求弦长的方法, ...5.测试上转型对象和接口回调的有关内容

    Java4Android 21_对象的转型

    主要讲述了JAVA中对象的转型的相关问题。

    day10 20 对象的向上转型

    day10_20_对象的向上转型

    day10 21 对象的向下转型

    day10_21_对象的向下转型

    能源革命推动老矿区转型发展研究

    为贯彻落实党的十九大精神,推进能源生产和消费革命,加快构建清洁低碳、安全高效的能源体系,以东北、山西老工业基地转型发展为研究对象,剖析老工业基地能源经济社会发展现状及关键问题,从整体和部分的层次阐述了能源...

    对象转型和多态1

    第一节: Object类类Object是类层次结构的根类。每个类都使用Object作为超类。指示其他某个对象是否与此对象“相等”。返回该对象的哈希码值。每一个对

    java程序设计与开发课件

    3.2.4 上转型对象····························· (45) 3.2.5 关键字this和super·························· (47) 3.2.6 对象的撤销和清理········...

Global site tag (gtag.js) - Google Analytics