小白进阶第七天

接口jdk8的新特性:


1、接口中可以定义普通方法
    default void test() {
        System.out.println("test");
    }
    static void test2() {
        System.out.println("test2");
    }
2、default修饰的方法要由实现类调用
      static 修饰的方法可以由接口名直接调用
       接口不能创建对象
3、实现类的接口和父类定义了同名方法,访问父类方法
4、如果两个接口中都定义了同名方法,会出现编译错误,子类必须重写同名方法

接口和抽象类的区别:

           抽象类                                                       接口
 模板类                                                     不同类型的公共行为
 不能多继承                                              可以多继承
 有构造方法                                              没有构造方法
 变量是普通的变量                                    都是共有静态变量
 普通方法                                                  普通方法由 default或者static修饰
 抽象方法没有默认访问修饰符                    访问 修饰符是public

内部类

1、类体内部类

      可以访问外部类的成员

      不可以定义静态成员,但是可以定义静态常量

      内部类定义对象,调用内部方法:外部类.内部类  名称=外部类.new 内部类

class Inner{
		final static int b =0;
		int a;
		void test3(){
			x = 0;
			y = 9;
			System.out.println("test3");
		}
	}

可以访问外部静态成员

可以定义静态和非静态成员

static class Inner{
		int a=0;
		static int b = 9;
		void f(){
			
			y = 9;
			System.out.println(y);
		}
	}

2、方法内的内部类

void f(){
		int a = 9;
		//可以访问外部类的成员
		//不能定义静态成员,但是可以定义静态常量
		//方法内的变量被内部类访问后,变量别表示为常量
		class Inner{
			int b=0; //jdk1.7之后默认常量
			final static int c = 0;
			void f(){
				int r = a+0;
				x = 0;
				y = 9;
				System.out.println("!!!!!");
			}
		}
		new Inner().f();
	}

3、匿名类

//创建子类的对象
	Object obj = new Object(){
		@Override
		public String toString() {
			return "Hello";			
		}
	};
	//接口的实现类
	IDemo demo = new IDemo(){
		@Override
		public void f() {
			System.out.println("接口方法的实现");			
		}		
	};
//方法的参数使用匿名类实现
        public void test(IDemo demo){
		demo.f();
	}	
	public static void main(String[] args) {
		Demo4 demo4 = new Demo4();
		demo4.test(new IDemo(){
			@Override
			public void f() {
				System.out.println("接口方法的实现");			
			}		
		});
	}

匿名类练习:

public interface IA {
	void ma();

}
class MyClass {
	public static void method(IA ia) {
		System.out.println("in method");
		ia.ma();
	}
}



public class TestInnerClass {
	public static void main(String[] args) {
		MyClass.method(new IA(){
			public void ma() {
				System.out.println("ma in anonymous inner class");
			}
		});
		class MyMaClass implements IA{
			public void ma() {
				System.out.println("ma in local inner class");
			}
		}
		MyClass.method(new MyMaClass());
	}

}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值