以下是学习java抽象类抽象方法的学习笔记,根据自己的理解写下来的,如果有不正确的地方欢迎指出。
1.抽象类不可以创建对象。
2.如果一个类继承抽象类,那么就必须实现这个抽象类中的所有抽象方法,非抽象方法可以不重写,但如果不实现其中所有的抽象方法,那么这个类也必须是抽象类。
3.当你需要这样一个类:你不希望它被创建对象,但在这个类中添加抽象方法又没有任何意义的时候,你可以把这个类写成抽象类。
abstract class Super {
abstract void f();
}
public class AbstractClass extends Super {
public static void main(String[] args) {
Super s = new AbstractClass();
s.f();
}
@Override
void f() {
System.out.println("this is a class overriwrite from super class");
}
}
运行结果就是:this is a class overriwrite from super class,
对于父类对象的引用指向子类对象,这里有篇文章:http://blog.csdn.net/gideal_wang/article/details/4913965
以下是java编程思想中对于抽象类和抽象方法作用的描述:
创建抽象类和抽象方法非常有用,因为它们可以使类的抽象性明确起来,并告诉用户和编译器打算怎样来使用它们,抽象类还是很有用的重构工具,因为它们使得我们可以很容易的将公共方法沿着继承层次结构向上移动。
最近从自己写适配器类对抽象类有了实战型的了解,如果是做android的朋友,可以看看,比如做一个ListViewAdapter,我需要继承自BaseAdapter,但是我在自定义适配器和BaseAdapter中间写一个类:
public abstract class BaseListAdapter<T> extends BaseAdapter
{
protected final List<T> list;
public BaseListAdapter()
{
super();
this.list = new ArrayList<T>();
}
public boolean addAll(List<? extends T> list)
{
return this.list.addAll(list);
}
public void clear()
{
this.list.clear();
}
public int getCount()
{
return list==null?0:list.size();
}
public T getItem(int i)
{
return this.list.get(i);
}
public long getItemId(int id)
{
return id;
}
public boolean hasStableIds()
{
return true;
}
public boolean isEmpty()
{
return list==null?true:list.isEmpty();
}
public T remove(int i)
{
return list.remove(i);
}
public void addItem(T t){
this.list.add(t);
}
}
这是一个抽象类,为什么要用这个抽象类呢?里面可没有一个抽象方法呀!上面讲到了,这样其实是希望这个类不被创建对象,但其实,这只是个鸡肋的理由,真正的理由是:BaseAdapter就是一个抽象类,但是getView()方法我需要在具体的适配器中实现,那这个类如果不写成抽象类,那不是要实现getView方法么,既然这样,就把这个类写成抽象类,具体的getView方法放到具体的适配器类中实现,接下来,这个类还有什么好处呢?
我可以在activity先setAdapter,然后再赋值!!为什么?因为
public BaseListAdapter()
{
super();
this.list = new ArrayList<T>();
}
这个list已经被创建了对象,而不是空的,以后的操作可以用addAll,remove等来对传入adapter的list做操作,而这些非抽象方法一旦被自定义适配器继承,那么这些方法都将成为子类的方法!
个人心得,谢绝转载,如要转载,太没劲了!