抽象类作形参和返回类型
根据抽象特性,其形参和返回值实际上都是抽象类的子类,而不是抽象类。
抽象类是无法实例化的,更不可能使用在参数和返回值
.
.
.
同理,接口也一样
抽象类做形参和返回类型
import MyPackage.test;
public class b {
public static void main(String[] args) {
c1 test1 = new c2();
// 但其实际上,根据多态,test1会被换成c2类型
// test1是c2类型,返回值和参数也是c2
test1.function2(test1);
}
}
abstract class c1 {
abstract void function();
abstract c1 function2(c1 n);
}
class c2 extends c1 {
public void function() {
System.out.println("这是方法");
}
// 参数是c1类型,抽象类型
public c1 function2(c1 n) {
n.function();
// 返回的是父类,抽象类型
return n;
}
}
接口类型做形参和返回类型
import MyPackage.test;
public class b {
public static void main(String[] args) {
f1 t1 = new c1();
t1.function(t1);
}
}
interface f1 {
abstract f1 function(f1 n);
abstract void function2();
}
class c1 implements f1 {
@Override
public void function2() {
System.out.println("这是实现接口方法");
}
public f1 function(f1 n) {
n.function2();
return n;
}
}
内部类
在第一轮我们学习过
外部类,内部静态类,局部类,匿名类实现,函数式编程
- 内部类
什么内部类,就是一个嵌套,注意一下俩类的内部成员访问权限
public class b {
public class a {
}
}
成员内部类(如上例)
局部内部类(方法中的类)
import javax.sound.midi.Soundbank;
public class b {
public static void main(String[] args) {
c2 t2 = new c2();
t2.function();
}
}
class c2 {
public void function() {
class c1 {
void function() {
System.out.println("局部内部类,这是方法内部类");
}
}
System.out.println("这是一个方法");
System.out.println("然后再调用其内部的类的方法");
c1 t1 = new c1();
t1.function();
}
}
匿名内部类(归属于局部内部类)
.
.
.
结合多态特性,也可以使用对象保存
匿名的类,本质就是将该类继承
import javax.sound.midi.Soundbank;
public class b {
public static void main(String[] args) {
new b2() {
public void function() {
System.out.println("这是匿名内部类");
}
}.function();
}
}
// 可以是类,接口,抽象类.....
class b2 {
}