哪位大神可不可以给我讲一下继承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);
}
}
楼上还没有加抽象方法!我来写一个简单的吧:
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其实就是模板模式的一个很好的实现。 --------------------编程问答-------------------- 过来补习下概念。 --------------------编程问答-------------------- 抽象类跟接口的用处差不多,各有好处,但是接口的实现类必须实现全部抽象方法,不包括父类的普通方法.抽象类可以实现接口.接口可以继承接口.2楼是一个经典的例子!!包含了抽象方法和普通方法 --------------------编程问答-------------------- 写的多了遇到的多了
体会也就多了 --------------------编程问答-------------------- 接口方法必须全实现,抽象更灵活让继承者实现一些或者必须使用一些 --------------------编程问答-------------------- 抽象类的使用和概念应该不难理解吧。
多敲老师教的代码,自己慢慢体会一下就知道该怎么去设计和继承它了。 --------------------编程问答-------------------- 抽象类在设计模式中可以实现适配器模式和模版模式,接口的话比抽象类更灵活了。。。。 --------------------编程问答-------------------- 抽象类就是含有抽象方法的类
抽象类不能被实例化
一般抽象类都会有子类继承,子类重写父类的方法,把它覆盖 --------------------编程问答-------------------- 说个最简单最浅的区别你先理解着吧。
抽象类:抽象方法+(实体方法)
接口:全抽象方法(实现时必须把所有的抽像方法重写实现)
当抽象类里面只有抽象方法时,可以考虑转成接口,因为类是单继承,接口可以实现“近似”的多继承功能,现在用抽象类的少了,接口灵活性要好点 --------------------编程问答-------------------- 有一种接口叫做回调接口,就可以借助抽象类实现
--------------------编程问答-------------------- 供Lz参考:
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();
}
}
抽象方法:必须在抽象类中,不具体的方法(看不懂的东西,不确定的),可修饰为抽象
不可以被实例化(也就是不能被new出来),创建他没意义,要被使用,必须由其子类复写所有方法,建立子类对象调用,如果子类只复写了部分抽象方法,那么该子类还是个抽象类
抽象类中可以不定义抽象方法,但是抽象方法一定要定义在抽象类中
补充:Java , Java SE