一、需求分析
实现一个哪国人说哪国话的功能

二、项目目录结构
图片说明

三、show me your code
父类Person:
Q:为什么要设计抽象类(abstract关键字)?
A:当父类知道子类应该包含什么方法,但不知道子类将如何实现,所以先将共性取出定义成一个抽象方法,方便子类继承后重写

package com.SpeakDemo;
//abstract关键字:设计抽象类与抽象方法
abstract class Person {
    public abstract void say();
}

子类Chinese:

package com.SpeakDemo;
public class Chinese extends Person{
    public void say() {
        System.out.println("你可以说");
    }
}

子类Usa

package com.SpeakDemo;
public class Usa extends Person{
    public void say() {
        System.out.println("u can talk");
    }
}

测试main()

package com.SpeakDemo;
public class Test {
    public static void main(String args[]) {
        Person c = new Chinese();  //产生Person类的变量c,并在内存堆区产生一个Chinese对象,赋值
//尽管c属于父类Person,但是它运行的是Chinese类的say方法。
//这是由于在编译阶段,只是检查参数的引用类型;但是在运行时,JVM指定对象的类型并且运行该对象的方法。
        Person u = new Usa();
        //Chinses c = new Chinses(); //这样写也可以,直接产生子类的变量
        //Usa u = new Usa();
        c.say();
        u.say();
        }
}