package demo1;
/**
* @Author: 黑木~
* @DATE: 2022/11/15 13:18
* 用继承和多态画图形
*/
class Shape{
public String name;
public void draw() {
System.out.println("画图形")/*此处并不能满足我要画什么图形,So用继承满足*/;
}
}
class Cycle extends Shape{
@Override
public void draw() {
System.out.println(name+"画~○~");
}
}
class Flower extends Shape{
@Override
public void draw() {
System.out.println(name+"画~❀~");
}
}
public class TestDemo1 {
public static void drawMap(Shape shape) {/*一个引用就引用了三个子类对象*/
shape.draw();
}
public static void main(String[] args) {
Shape shape1 = new Shape();
Shape shape2 = new Cycle();
Shape shape3 = new Flower();
drawMap(shape1);
drawMap(shape2);
drawMap(shape3);
}
}
当我不是用多态画图形的时候我就要遍历这个数组一步一步判断来带调用对应的方法,然而用前面的那个多态的话只需要将相应的对象的引用放在写好的函数里面就可以了
Example:
package demo1;
/**
* @Author: 黑木~
* @DATE: 2022/11/15 17:39
* 不使用多态画图形
*/
class Shape{
public String name;
public void draw() {
System.out.println("画图形")/*此处并不能满足我要画什么图形,So用继承满足*/;
}
}
class Cycle extends Shape{
@Override
public void draw() {
System.out.println(name+"画~○~");
}
}
class Flower extends Shape{
@Override
public void draw() {
System.out.println(name+"画~❀~");
}
}
public class TestDemo2 {
/*public static void drawMap(Shape shape) {
shape.draw();
}*/
public static void main(String[] args) {
Cycle cycle = new Cycle();
cycle.name="haha";
Flower flower = new Flower();
flower.name= "hehe";
String[] shapes={"cycle","flower"};
/*接下来怎么画图形--遍历这个数组*/
for (String s: shapes) {
if (s.equals("cycle")){
cycle.draw();
}else {
flower.draw();
}
}
}
}