java 类的学习——多态

本文通过具体的Java代码示例介绍了多态性的概念及其应用。详细解释了如何通过父类引用调用子类方法,并展示了多态在实际编程中的灵活性。同时,文章还涉及了方法覆盖的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.多态性:访问子类可以通过访问父类:

Animal cat =new Cat();

Animal dog =new Dog();

2.在使用多态的时候,如果有使用覆盖函数,那么被覆盖的方法(即是父类中的的那个相应的方法)是要存在的。

3. 多态:一个引用(类型)在不同情况下的多种状态,可使代码更加灵活

4.java允许父类的引用变量引用它子类的实例,是自动完成的

代码:

package com.agui;

public class Demo5 {


public static void main(String[] args) {
// TODO Auto-generated method stub
Dog2 ddd=new Dog2();
ddd.cry();
Cat2 ccc=new Cat2();
ccc.cry();
Animal2 an =new Cat2();
an.cry();
Master xxx=new Master();
xxx.feed(new Dog2(),new Bone());
}

}


//动物类
class Animal2
{
String name;
int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}

//叫
public void cry()
{
System.out.println("buxiaodezenmejiao");

}
public void eat()
{

System.out.println("buzhidao chishenme");

}
}

class Master
{
//使用多态,方法就可以用一个了

public void feed(Animal2 an,Food f)
{
an.eat();
f.showName();
}
}


class Food
{
String name;
public void showName()
{

}
}

class Fish extends Food
{
public void showName()
{
System.out.println("yurou");

}

}
class Bone extends Food
{
public void showName()
{
System.out.println("gutou");

}

}


class Cat2 extends Animal2
{
//猫自己叫
public void cry()
{
System.out.println("maomaojiao");
}
public void eat()
{
System.out.println("aichiyu");
}

}


class Dog2 extends Animal2
{
//gou自己叫
public void cry()
{
System.out.println("wangwangjiao");
}
public void eat()
{

System.out.println("aichigutou");

}

}

### Java 中抽象多态的概念及用法 #### 抽象定义及其特性 在 Java 中,使用 `abstract` 关键字来定义抽象以及其中的抽象法。抽象不能实例化,即无法创建其对象;只有当一个至少包含一个抽象法时,才允许将其声明为抽象[^2]。 ```java // 定义了一个名为Shape的抽象,并声明了draw()作为抽象法 abstract class Shape { public abstract void draw(); } ``` #### 实现抽象式 任何继承自抽象的具体子类都必须提供所有未实现成员函数的实际版本——也就是覆写这些抽象法,除非该子类同样被标记成抽象[^1]。 ```java class Circle extends Shape { @Override public void draw() { System.out.println("Drawing a circle."); } } // 如果B不是最终具体化的,则也可以继续保持为抽象状态 abstract class A extends Shape { public abstract void draw2(); } class Rectangle extends A { @Override public void draw() { System.out.println("Drawing a rectangle."); } @Override public void draw2() { System.out.println("Additional drawing logic for subclass of A"); } } ``` #### 多态性的体现式 通过让父型的变量指向不同子类型的新建实体,在运行期间调用相应于实际所指派之特定型别的虚函數或覆盖版的法,从而达到动态绑定的效果。这便是所谓的编译期静态型检查配合执行时期动态分发机制共同作用下的面向对象编程核心概念之一 —— **多态**[^3]。 ```java public static void main(String[] args){ // 创建不同型对象并赋予相同基引用 Shape shapeRef; shapeRef = new Circle(); shapeRef.draw(); // 输出:"Drawing a circle." shapeRef = new Rectangle(); shapeRef.draw(); // 输出:"Drawing a rectangle." // 注意这里虽然shapeRef是Shape型, // 但是由于真正的对象是Rectangle, // 所以会调用Rectangle里的draw() } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值