http://blog.csdn.net/chenssy/article/details/12858267
1.abstract关键字
抽象类提供了继承的概念,它的出发点就是为了继承,否则它没有存在的任何意义
error:Abstract methods do not specify a body
--abstract void setOS(){}(去掉外面的花括号)
1、抽象类不能被实例化,实例化的工作应该交由它的子类来完成,它只需要有一个引用即可。
2、抽象方法必须由子类来进行重写。
3、只要包含一个抽象方法的抽象类,该方法必须要定义成抽象类,不管是否还包含有其他方法。
4、抽象类中可以包含具体的方法,当然也可以不包含抽象方法。
5、子类中的抽象方法不能与父类的抽象方法同名。
6、abstract不能与final并列修饰同一个类。
7、abstract 不能与private、static、final或native并列修饰同一个方法。
在自定义CustomeAdapter中,用到自己写一个基类集成BaseAdapter,那么必须实现getView接口方法,将CustomeAdapter定义为抽象类可以解决这个问题
看接口的第四条特性:
1、Interface的所有方法访问权限自动被声明为public。确切的说只能为public,当然你可以显示的声明为protected、private,但是编译会出错!
2、接口中可以定义“成员变量”,或者说是不可变的常量,因为接口中的“成员变量”会自动变为为public static final。可以通过类命名直接访问:ImplementClass.name。
3、接口中不存在实现的方法。
4、实现接口的非抽象类必须要实现该接口的所有方法。抽象类可以不用实现。
5、不能使用new操作符实例化一个接口,但可以声明一个接口变量,该变量必须引用(refer to)一个实现该接口的类的对象。可以使用 instanceof 检查一个对象是否实现了某个特定的接口。例如:if(anObject instanceof Comparable){}。
6、在实现多接口的时候一定要避免方法名的重复。
2.泛型使用
public class Apple<T> {
private T info;
public Apple(T info) {
this.info = info;
}
public T getInfo() {
return info;
}
public void setInfo(T info) {
this.info = info;
}
public static void main(String[] args) {
Apple<String> apple = new Apple<>("apple");
Apple<Double> apple2 = new Apple<>(8.89);
System.out.println("apple1: --"+apple.getInfo());
System.out.println("apple2: --"+apple2.getInfo());
ExtendApple extendApple = new ExtendApple("jicheng apple");
System.out.println("extendApple: --"+extendApple.getInfo());
}
}
关于Apple类中T代表类型实参,可以作为类使用