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

一、方法参数类型以及返回值类型
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方法
发布了24 篇原创文章 · 获赞 11 · 访问量 2060

猜你喜欢

转载自blog.csdn.net/weixin_43791069/article/details/85241161
今日推荐