/** 用户名. * 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); } }
楼上还没有加抽象方法!我来写一个简单的吧: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其实就是模板模式的一个很好的实现。
有一种接口叫做回调接口,就可以借助抽象类实现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(); } }
按照我自己的思路来了: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);
}
}
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其实就是模板模式的一个很好的实现。
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();
}
}