关于
abstract class B
class A extends B
的用法?
该用法用在链式调用中有继承关系时,示例如下:
单个类中链式调用非常常见,比如StringBuffer
中的append
方法
StringBuffer sb = new StringBuffer();
sb.append("精通")
.append("java")
.append("只需要CV")
.append("即可");
链式调用单类写法,返回当前对象即可
class Cat {
public Cat eat() {
System.out.println("吃东西");
return this;
}
public Cat sleep() {
System.out.println("准备睡觉");
return this;
}
}
调用测试
public class Client {
public static void main(String[] args) {
Cat cat = new Cat();
//链式调用
cat.eat().sleep();
}
}
}
//输出结果
吃东西
准备睡觉
class Animal {
public Animal run() {
System.out.println("奔跑");
return this;
}
}
class Cat extends Animal{
public Cat eat() {
System.out.println("吃东西");
return this;
}
public Cat sleep() {
System.out.println("准备睡觉");
return this;
}
}
public static void main(String[] args) {
Cat cat = new Cat();
//此处.sleep出现编译错误
//原因是调用run后返回的是父类Animal类型,此时无法调用子类扩展的sleep方法
cat.eat().run().sleep();
}
>
class Animal<T extends Animal<T>> {
public T run() {
System.out.println("奔跑");
return (T)this;
}
}
class Cat extends Animal<Cat>{
public Cat eat() {
System.out.println("吃东西");
return this;
}
public Cat sleep() {
System.out.println("准备睡觉");
return this;
}
}
改变后客户端泛型将不再出错