您的位置:首页 > 编程语言 > Java开发

java学习笔记8:方法参数类型以及返回值类型、内部类、匿名内部类

2018-12-26 02:34 393 查看

一、方法参数类型以及返回值类型
1、形式参数
①是基本类型要的是一个基本类型的变量或者具体的常量值
②是类名的时候要的是一个该类的对象
③是抽象类名的时候的要的是一个继承自该类的一个子类对象
④是接口的时候要的是一个实现了该接口的子类对象
2、返回值类型
①是基本数据类型的时候返回的是一个具体的值
②是基本数据类型的时候返回的是一个具体的值
③是抽象类名的时候返回的应该是一个继承自该类的子类对象
④是接口名的时候返回的是一个实现了该接口的子类对象

传参
public class MyTest {
public static void main(String[] args) {
Student student = new Student();
student.setStudent(new Student(),"张三");
Cat cat = new Cat();
Animal an = new Cat();
setAnimal(an);
System.out.println("---------------");
setInterface(new MyClass());
}
public static void setAnimal(Animal an) {
an.eat();
}
public static void setInterface(MyInterface myInterface) {
myInterface.test();
}
}
interface MyInterface {
void test();
}
class MyClass implements MyInterface{
@Override
public void test() {
System.out.println("我重写了接口的方法");
}
}
class Student {
String name;
public void setStudent(Student s,String mz){
s.name=mz;
}
}

返回值

public static Animal getAnimal(){
return new Dog();
}
public static MyInterface getInterface(){
return new MyClass();
}
public Teacher getTeacher(Teacher teacher,String mz){
teacher.name=mz;
return this;
}

二、内部类
把类定义在其他类的内部,这个类就被称为内部类。
1、特点::
①内部类可以直接访问外部类的成员,包括私有。
②外部类要访问内部类的成员,必须创建对象。
2、按照内部类的定义位置分为,成员内部类和局部内部类

class B{
class A{} //成员内部类
public void  show(){
class C{}//局部内部类
}
}

成员内部类访问外部内格式: 外部类名.内部类名 对象名 = 外部类对象.内部类对象;

class Outer {
public int num = 10;
class Inner {
public int num = 20;
public void show() {
int num = 30;
System.out.println(num);//30
System.out.println(Inner.this.num);//20
System.out.println(Outer.this.num);//10
}
}
}
class InnerClassTest {
public static void main(String[] args) {
Outer.Inner oi = new Outer().new Inner();
oi.show();
}
}

局部内部类访问局部变量:
①可以直接访问外部类的成员
②可以创建内部类对象,通过对象调用内部类方法,来使用局部内部类功能
③局部内部类访问局部变量必须用final修饰;因为局部变量会随着方法的调用完毕而消失,这个时候,局部对象并没有立马从堆内存中消失,还要使用那个变量。为了让数据还能继续被使用,就用fianl修饰,这样,在堆内存里面存储的其实是一个常量值。

class Outer {
// 成员变量
private int a = 45 ;
// 成员方法
public void show() {
final int b = 45 ;//JDK1.7之前要加final不然会报错  但是在JDK1.8 不加不会报错
class Inner {
public void method(){
System.out.println(a) ;//45
System.out.println(b) ;//45
}
}
Inner i = new Inner() ;
i.method() ;
}
}
class InnerClassDemo6 {
public static void main(String[] args) {
Outer out = new Outer() ;
out.show() ;
}
}

三、匿名内部类
1、就是局部内部类的简化写法。
2、前提: 存在一个类或者接口;这里的类可以是具体类也可以是抽象类。
3、格式:

new 类名或者接口名(){
重写方法;
} ;

4、本质就是一个继承了该类或者实现了该接口的子类匿名对象。

public class MyTest {
public static void main(String[] args) {
//匿名内部类
setFu(new Fu() {
@Override
public void show() {
System.out.println("我重写了show方法");
}
});
Zi zi = new Zi();
setFu(zi);
}
public static void setFu(Fu f){
f.show();
}
}
abstract class Fu {
public abstract void show();
}
class Zi extends Fu{
@Override
public void show() {
System.out.println("我重写了父类的show方法");
}
}
//输出:我重写了show方法
//我重写了父类的show方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐