📄 j02080308.java
字号:
import java.lang.*;
class j02080308
{
public static void main(String[] para)
{
youngMan actorA = new youngMan("魅影");
actorA.sing("落花");
actorA.sing("落花",4);
oldMan actorB = new oldMan("月");
actorB.sing("梦中梦");
actorB.sing("梦中梦",2);
actor actorC = new oldMan();
actorC.sing("一枝梅");
actorC.sing("一枝梅",3);
actorC.callAbstract("水之湄");
}
}
abstract class actor
{
private String roleName;
public actor()
{
roleName = "临时演员";
}
public actor(String name)
{
roleName = name;
//sing("ABC");
/*可以调用,因为子类一定会实现这个 abstract 方法,
才会由使用子类构造子,间接又调用此构造子,
但子类实现方法时若去取子类内定义且未在定时给定初值之成员变量,
所取得只会是 0,null,false 等,而不是子类构造完成后之值,
因为子类实例虽已配置,但要等到子类构造子内容执行才会为它设定有意义(我们所希望)之值,
故不建议于构造子调用 abstract 方法*/
}
public String getRoleName()
{
return roleName;
}
public abstract void sing(String song);
public void sing(String song,int times)
{ // 可 overload abstract method
System.out.println("角色:" + roleName
+ " 歌曲:" + song);
for( int x=1;x<=times;x++ )
System.out.println("ㄡ一ㄡ一~~ㄡ~~~");
}
public void callAbstract(String song)
{
System.out.println("abstract 类之函数内调用 abstract 方法");
sing(song);
}
}
class youngMan extends actor
{
public youngMan()
{
//super(); //不需特别指定
}
public youngMan(String name)
{
super(name);
}
public void sing(String song)
{
System.out.println("角色:" + getRoleName()
+ " 歌曲:" + song);
System.out.println("ㄚ~~~ㄚ~~~");
}
public void sing(String song,int times)
{ // override 继承自 actor 的 sing(String song,int times)
System.out.println("角色:" + getRoleName()
+ " 歌曲:" + song);
for( int x=1;x<=times;x++ )
System.out.println("ㄚ~~~ㄚ~~~");
}
}
class oldMan extends actor
{
public oldMan()
{
//super(); //不需特别指定
}
public oldMan(String name)
{
super(name);
}
public void sing(String song)
{
System.out.println("角色:" + getRoleName()
+ " 歌曲:" + song);
System.out.println("???...咳...这是啥米?");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -