形参和返回值
1.类名作为形参和返回值
方法的形参是类名,其实需要的是该类的对象
方法的返回值是类名,其实返回的是该类的对象
2.抽象类作为形参和返回值
方法的的形参是抽象类名,其实需要的是该抽象类的子类对象
方法的返回值是抽象类名,其实返回的是该抽象类的子类对象
3.接口名作为形参和返回值
方法的形参是接口名,其实需要的是该接口的实现类对象
方法的返回值是接口名,其实返回的是该接口的实现类对象
内部类
1.内部类概述:
内部类:
在一个类中定义一个类,在类A的内部定义一个类B 类B就被称为内部类
定义格式:
public class 类名{
修饰符 class 类名{
}
}
范例:
public class Outer{
public class Inner{
}
}
内部类的访问特点:
内部类可以直接访问外部类的成员,包括私有
外部类要访问内部类的成员,必须创建对象。
2.成员内部类
按照内部类类定义的不同位置,分成两种形式
在类的成员位置: 成员内部类
在类的局部位置: 局部内部类
如何在外界创建成员内部类的对象
格式: 外部类.内部类名 对象名 = 外部类.内部类对象;
范例: Outer.Inner oi = new Outer().new Inner();
3.局部内部类
局部内部类是在方法中定义的类,外界不能直接使用,需要在方法内部创建对象并使用
该类可以直接访问外部类的成员,也可以访问方法内的局部变量
4.匿名内部类
前提: 存在一个类或者接口,可以是具体类也可以是抽象类。
格式:
new 类名或者接口名(){
重写方法;
}
范例:
new Inter(){
public void show(){
}
}
本质: 是一个继承了该类或者实现了该接口的子类匿名对象。
5.匿名内部类在开发中的使用
有些只使用一此的方法,可以不用单独创建类出来,可以使用匿名内部类的方式进行使用
案例:猫和狗都实现跳高
public class JumppingDemo {
public static void main(String[] args) {
JunppingOperator jo = new JunppingOperator();
/*
Jump j = new Cat(); 需要创建一个类并且实现Jump接口 麻烦
Jump j1 = new Dog();
jo.method(j);
jo.method(j1);
*//*
jo.method(new Jump() { 匿名内部类的方法直接使用
@Override
public void show() {
System.out.println("猫跳高");
}
});
jo.method(new Jump() {
@Override
public void show() {
System.out.println("狗跳高");
}
});
}
}
public interface Jump { //接口
void show();
}
public class JunppingOperator {
public void method(Jump j){
j.show();
}
}
/* 只是用了一次的方法,不必要创建的类
public class Dog implements Jump {
@Override
public void show() {
System.out.println("狗跳高");
}
}
public class Cat implements Jump{
@Override
public void show() {
System.out.println("猫跳高");
}
}
*/