查找写资料对上转型对象做个了解:
假设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编程语言中,上转型对象(Upcasting)是一种面向对象编程的概念,它涉及到将子类对象赋值给父类类型的引用。这种做法允许我们使用父类引用来调用子类对象的方法,从而实现多态性。在Java中,所有类都隐式地...
Java实现运用上转型以及对象抽象方法计算圆形或圆锥的面积、周长等成员变量
Java 上转型和下转型对象 Java 中的上转型和下转型对象是对象之间的类型转换关系,用于描述父类和子类之间的继承关系。在 Java 中,我们可以通过上转型和下转型来实现对象之间的类型转换。 上转型对象 上转型对象...
在这个例子中,`myPet1`和`myPet2`虽然都是`Animal`类型,但它们实际上是`Dog`和`Cat`的实例。这就是多态性:我们可以通过相同的方法(`sound()`)来处理不同类型的对象,而具体的行为由运行时的对象类型决定。 ...
对象的上转型对象的实体是子类负责创建的,但上转型对象会失去原对象的一些属性和功能。 对象的上转型对象具有以下特点: * 上转型对象不能操作子类声明定义的成员变量;也不能使用子类声明定义的方法。 * 上转型...
- 向下转型必须确保对象实际上是目标子类的实例,否则会导致 `ClassCastException`。 - 转型并不改变对象本身的类型,只是改变了引用的类型,因此转型前后对象的实际类型保持不变。 5. 示例代码分析: 在给定的代码...
Java实验5主要涉及了接口的使用、抽象类与接口的区别以及上转型对象的概念。下面将对这些知识点进行详细的解释。 1. **接口的定义与实现** 接口在Java中是一种完全抽象的类型,它定义了一组方法的签名,但不包含...
上转型对象是子类对象被当作父类对象使用,这允许子类对象可以被赋值给父类引用,实现多态性。 3.7 接口: 接口是Java中定义行为的规范,不包含具体实现。通过实现接口,类可以承诺提供特定的方法。接口是多继承的...
**3.2.4 上转型对象**:上转型对象是指将子类对象引用赋值给父类类型的变量,实现多态性。 **3.2.5 关键字`this`和`super`**:`this`关键字引用当前对象,`super`则用于访问父类的成员。 **3.2.6 对象的撤销和清理...
然而,上转型对象只能调用父类中定义的方法和访问父类中的属性,无法访问子类特有的属性和方法。 **接口**在Java中扮演着另一种形式的继承,但它是一种行为上的继承。接口是一组抽象方法的集合,用于定义类必须实现...
在主类中people类的声明对象分别作为Chinapeople和Americanpeople类对象的上转型对象,并让这个上转型对象调用showname方法。编写一个people类,该类有string类型的成员变量firstname和lastname来存放people对象的...
- 上转型对象是父类引用指向子类实例的能力,这在实验中的`Employee`类及其子类`YearWorker`、`MonthWorker`、`WeekWorker`中得以体现。`Employee`定义了一个抽象方法`earnings()`,子类必须重写此方法以定义各自的...
- **多态性**:同名方法在不同对象上有不同行为,可通过子类对象调用父类方法实现。 7. **方法的重载和覆盖**: - **方法重载**:同名方法,但参数列表不同,编译期确定调用。 - **方法覆盖**:子类方法覆盖父类...
向上转型是指将子类对象转换为父类对象,而向下转型是指将父类对象转换为子类对象。 向上转型(Upcasting) 向上转型是将子类对象转换为父类对象的过程。在 Java 中,我们可以将子类对象赋值给父类对象,这时 Java...
+ 抽象类声明的对象做上转型对象。 * 接口具有如下特点: + 接口中只可以有 public 权限的 abstract 方法,不能有非 abstract 方法。 + 接口由类去实现,即一个类如果实现一个接口,那么它必须重写接口中的 ...
4. 上转型对象可以被强制转换回子类对象,从而恢复子类的所有特性。 多态性是Java中与继承相关的特性,当一个方法在父类中被子类重写时,不同类型的对象调用该方法可能会有不同的行为。这就是所谓的“同一操作作用...
1. **上转型对象与多态**: - 上转型对象是在继承体系中,父类引用指向子类对象的过程。例如,`Animal`是`Dog`和`Cat`的父类,`Animal a = new Dog();` 或 `Animal b = new Cat();` 这里的`a`和`b`就是上转型对象。...
上转型对象是指向上层父类的引用,可以指向任何子类的对象,这样可以实现多态性。 7. **接口回调**: 接口回调是指在运行时通过接口调用实现类的方法。这允许代码在运行时动态地决定调用哪个类的方法,增强了代码...
- 上转型对象是指父类引用指向子类对象,允许调用父类的方法和共享继承的成员变量,但无法访问子类特有的成员。 - 上转型对象可以通过强制类型转换转回子类对象,以便访问子类的所有成员。 7. 抽象类和抽象方法 ...