62,621
社区成员
发帖
与我相关
我的任务
分享
public interface I {
public void doSomething();
}
public abstract class Ac implements I{
@Override
public void doSomething() {
beforDoSomething();
System.out.println("DoIt");
afterDoSomething();
}
abstract void beforDoSomething();
abstract void afterDoSomething();
}
public class Cc extends Ac {
@Override
void beforDoSomething() {
System.out.println("befor");
}
@Override
void afterDoSomething() {
System.out.println("after");
}
public static void main(String[] args) {
I i = new Cc();
i.doSomething();
}
}
abstract class Job {
public void show() {
System.out.println(getName());
}
// 抽象方法,等待子类实现
public abstract String getName();
}
class Teacher extends Job {
public String getName() {
return "man";
}
}
Job只是一个抽象的概念,具体的职业才能实例化。
Job定义了不同职业的共性的东西,像show,而不同的具体的职业的名字都不同,所以把show()作为抽象方法,等待具体的子类来实现。
Job只是定义好一个模板,show可以print职业名,即使不知道具体的职业。而当具体的职业类Teacher继承了Job以后,就必须实现Job遗留下来的getName方法,这时候show就能正常执行了。
楼主可以看看【模板模式】这个里面有详细的介绍!java的abstract其实就是模板模式的一个很好的实现。
按照我自己的思路来了:
1.抽象类不可以创建实例;
2.在子类里面如果没有覆盖父类的方法,则子类也将成为抽象类.
写的不好。。。凑合看下吧...
/** 测试abstract使用.
*
* @author Ruidong_pu
* @version 1.1 2013.1.10
*/
abstract class Tests {
private String name;//定义姓名
private String pwd;//定义密码
public Tests(){
}
/** 用户名.
* set/get
* @param name
*/
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
/** 密码
* set/get
* @param pwd
*/
public void setPwd(String pwd){
this.pwd=pwd;
}
public String getPwd(){
return pwd;
}
/**
* 重写需要注意:
* 1.名称
* 2.参数
* 3.返回类型这些需要一致.
* @return 父类名称.
*/
public String Show(){
//System.out.println("Tests");
return "Tests";
}
}
public class TestTop extends Tests {
public TestTop(){
super();
}
/**
* 输出,覆盖父类的同名方法.
* @return TestTop类的测试字符串
*/
public String Show(){
setName("x");
setPwd("123");
//System.out.println("TestsTop");
return "TestTop:这个用户名是:"+getName()+"\t\t密码是:"+getPwd() ;
}
public static void main(String args[]) {
// TODO Auto-generated method stu
Tests t =new TestTop();
System.out.println(t.Show());
System.out.println(t);
}
}