「java上溯举例」java上溯造型

博主:adminadmin 2022-12-01 02:56:07 63

今天给各位分享java上溯举例的知识,其中也会对java上溯造型进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

JAVA里什么是上转型对象?

class Human{

public void drink(){System.out.println("Human");}

}

class YongMan extends Human{

public void drink(){System.out.println("YongMan");}}

}

public class Test{

public static void main(String arge[]){

Human e2=new YongMan();

e2.drink();

}

}

以上面这个程序为例子

Human e2=new YongMan();

这句其实是指父类对象e2是子类YongMan对象的上转型对象

上转型对象不能操作子类新增的成员变量(失掉了这部分属性);不能使用子类新增的方法(失掉了一些功能)。

上转型对象可以操作子类继承或者隐藏的成员变量,也可以使用子类继承的或者重写的方法。上转型对象操作子类继承或重写的方法,其作用等价于子类对象去调用这些方法。因此,如果子类重写了父类的某个方法,则当对象的上转型对象调用这个方法时一定是调用了这个重写的方法

上面的YongMan 类中的drink()方法 重写了父类的方法

所以最后的输出结果是YongMan

java 中什么叫上朔造型和下朔造型,它们的区别 与用法

上溯造型指基类(或超类super class)或接口,下溯类型指继承或实现了类或者接口的子类.

说白了就是父类和子类,区别与用法不用我多说了吧,懂java的多态的话就知道.

java面向对象编程问题

关于多态

类之间的继承关系使子类具有父类的所有变量和方法,= 父类所具有的方法也可以在它所有子类中使用,发给父类的消息也可以发送给子类 = 子类的对象也是父类的对象=子类的对象既可以做本身的类型,也可以做父类的类型。 呵呵,上述推导公式好像绕口令似的。我们举个例子理解上述概念。举例:

public class 动物 //动物是父类

public class 猫 extends 动物 //猫是子类

动物的所有特性在猫中可以使用,发给动物的信息猫也能收到=猫的对象new 猫();既可以作为本身的类型 猫 a=new 猫(); 也可以作为父类的类型 动物 b = new 猫();这样说理解了吗?如有疑问请访问我们的技术论坛。

如果大家明白了的话,我们就可以从上述公式推导出结论,所有的子类都可以作为父类的类型(同一种类型)来对待。像刚才那个动物有很多子类啊,可以有很多对象。动物 a=new 猫();动物 b=new 狗(); 动物 c=new 猪();。这样的将子类型的对象引用转换成父类型的对象引用,叫做上溯造型(upcasting)。

我们再来引伸一下,我们在数组那节课里讲了,数组存放的元素是相同类型的数据,但是上溯造型使得java允许创建不同类型对象的数组。例如:

Employee[] staff = new Employee[3];

staff[0] = new Manager();

staff[1] = new Secretary();

staff[2] = new Employee();

夷?这是怎么回事啊,数组里面不是相同类型吗?对啊,因为Sectetary和Manager是Employee的子类,所以也可以通过上溯造型变成Employee啊。以前我们还学到了所有对象都是从java.lang.Object 继承下来的。如果数组要是 Object型的话 Object[] obj=new Object[];那就是里面放什么对象都行了。因为什么对象都可以是Object型的。

实践:

// java中的多态

class Shape {

void draw() {}

void erase() {}

}

//圆形

class Circle extends Shape {

void draw() {

System.out.println("Circle.draw()");

}

void erase() {

System.out.println("Circle.erase()");

}

}

//正方形

class Square extends Shape {

void draw() {

System.out.println("Square.draw()");

}

void erase() {

System.out.println("Square.erase()");

}

}

//三角形

class Triangle extends Shape {

void draw() {

System.out.println("Triangle.draw()");

}

void erase() {

System.out.println("Triangle.erase()");

}

}

public class Shapes {

public static Shape randShape() {

switch((int)(Math.random() * 3)) {

default:

case 0: return new Circle();

case 1: return new Square();

case 2: return new Triangle();

}

}

public static void main(String[] args) {

Shape[] s = new Shape[9];

// 向数组里添加类型

for(int i = 0; i s.length; i++)

s[i] = randShape();

// 用多态的方法调用

for(int i = 0; i s.length; i++)

s[i].draw();

}

}

Java:这里被上溯为父类型后,还可以通过类型转换转换回子类型?

可以用形象点的例子来解释:

TF卡跟TF卡卡套,套上卡套的TF卡就是一张大卡,可以理解为将TF卡(子类)强制转换为大卡(父类)使用。但这个大卡的核心还是TF卡(子类)。因此在需要用TF卡的地方,可把卡套拿掉变成TF卡(再次转换回子类)来使用。但是如果是大卡里套的不是TF卡,而是另一个标准的卡,虽然它也是大卡,但由于当初不是由TF卡转换过来的,所以你拿掉卡套还是不能转换为TF卡。

总结:

子类转换为父类使用,只是隐藏掉了子类的一些信息,但这些信息并没有被抛弃,就像是在外面套了层套子,隐藏了些东西,但拿到套子还是可以继续变成子类的。但是可以转换为父类使用的不只是这个一个子类,也就是说能套上这个套子继续使用的不只是一种小卡,还有其他的卡呢。

java中上溯造型是什么原理

Upcasting,上溯造型,有的书译作“向上转型”,是实现Java多态(Polymorphism) 的基石。

Casting指的是对象之间类型的转换。将一个对象的引用(Object

Reference)看作其父类对象的引用(Reference to base

type)叫做Upcasting(上溯造型或向上转型)。反之,将对象的引用看作其子类的引用叫Downcasting。

Upcating系统会自动替你去做,而Downcasting则需要强制类型转换。

关于java上溯举例和java上溯造型的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-01,除非注明,否则均为首码项目网原创文章,转载请注明出处。