java上转型对象 和 多态&多态的应用

java上转型对象/多态

上转型:
A类是B类的父类,当用子类创建一个对象,并把这个对象的引用放到父类的对象中时

例如 A a = new B();

A a;
B b=new B();
a=b;

此时,称对象a是对象b的上转型对象

即此时a对象可以调用子类继承的成员变量、继承的方法 和 子类重写的实例方法;不能操作子类新增的成员变量和新增的方法。当然,a也可以调用自己本身父类中的成员变量(非私有)和方法。

多态:
当一个类有很多子类,这些子类都重写父类中的某个实例方法,当我们把子类创建的对象的引用放到父类对象中时,就得到了子类的一个上转型对象,即父类的对象。因为上转型对象可以调用子类继承的重写的方法,因此该上转型对象调用同一实例方法时可以产生不同的行为,因为子类重写的方法的行为可能不一样。多态性就是指父类的某个实例方法被其子类重写时,可以产生各自的不同行为。

要实现多态,首先要有继承或实现的关系,并且要有方法重写

多态的使用场景:父类型可以作为方法形参的数据类型,此时,该形参可以接受其任意的子类对象。(一种上转型)

public class Test {
	
	public static void main(String args[]){
		Dog dog=new Dog();
		dog.setName("hashiqi");
		showAnimal(dog);
		Mouse mouse=new Mouse();
		mouse.setName("jerry");
		showAnimal(mouse);
	}
	public static void showAnimal(Animal animal){
		animal.eat();
	}
}
public class Mouse extends Animal{
	@Override
	public void eat(){
		System.out.println(getName()+"吃肉");
	}

}

public class Dog extends Animal{
	@Override
	public void eat(){
		System.out.println(getName()+"吃骨头");
	}

}

public class Animal {
	private String name;
	public Animal(){
		
	}
	public Animal(String name){
		this.name=name;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public void eat(){
		System.out.println("吃饭");
	}

}

输出:在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验过程: 1. 首先,我们需要定义一个抽象的“形状”类,其中包含计算面积和周长的抽象方法。 ```java public abstract class Shape { public abstract double getArea(); public abstract double getPerimeter(); } ``` 2. 接着,我们定义具体的“三角形”和“圆”类,这两个类都继承自“形状”类,并实现了其抽象方法。其中,“三角形”类的实现如下: ```java public class Triangle extends Shape { private double a, b, c; public Triangle(double a, double b, double c) { this.a = a; this.b = b; this.c = c; } public double getArea() { double p = (a + b + c) / 2; return Math.sqrt(p * (p - a) * (p - b) * (p - c)); } public double getPerimeter() { return a + b + c; } } ``` “圆”类的实现如下: ```java public class Circle extends Shape { private double r; public Circle(double r) { this.r = r; } public double getArea() { return Math.PI * r * r; } public double getPerimeter() { return 2 * Math.PI * r; } } ``` 3. 在主函数中,我们使用了多的概念,将“三角形”和“圆”类向上转型“形状”类。这样,我们就可以使用“形状”类的引用来调用“三角形”和“圆”类的方法。 ```java Shape triangle = new Triangle(3, 4, 5); Shape circle = new Circle(2); double triangleArea = triangle.getArea(); double trianglePerimeter = triangle.getPerimeter(); double circleArea = circle.getArea(); double circlePerimeter = circle.getPerimeter(); ``` 4. 将三角形和圆的面积和周长输出到控制台上 ```java System.out.println("Triangle: area = " + triangleArea + ", perimeter = " + trianglePerimeter); System.out.println("Circle: area = " + circleArea + ", perimeter = " + circlePerimeter); ``` 分析讨论: 本次实验中,我们使用了Java语言中的上转型和多的概念来实现计算三角形和圆的面积和周长。采用这种方式,我们可以将不同的形状对象向上转型为同一个父类对象,从而实现了代码的复用和扩展性。 具体来说,我们定义了一个抽象的“形状”类,其中包含了计算面积和周长的抽象方法。然后,我们分别定义了“三角形”和“圆”类,这两个类都继承自“形状”类,并实现了其抽象方法。在这个过程中,我们使用了多的概念,将“三角形”和“圆”类向上转型“形状”类。这样,我们就可以使用“形状”类的引用来调用“三角形”和“圆”类的方法。 这种方式的优点在于,我们可以将不同的形状对象看作是同一个父类对象,从而实现了代码的复用和扩展性。例如,如果我们需要计算矩形的面积和周长,只需定义一个新的“矩形”类,继承自“形状”类,并实现其抽象方法即可。而不需要重新定义一个新的类来实现这个功能。 总之,本次实验中的上转型和多的概念是Java语言中非常重要的一部分,它可以提高代码的复用性和扩展性,是Java开发中必须掌握的知识点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值