java学习小结3

269 阅读4分钟

1.接口

在java中,接口是抽象方法的集合.接口用interface关键字声明.

1.接口声明的语法格式:

修饰符 interface 接口名 [extends 其它接口]{
    [声明变量;]
    抽象方法;
}

2.接口的优点:

  • 接口是功能体的集合
  • 是一个引用数据类型,可以多实现,也就是一个实现类可以实现多个接口
  • 解耦
  • 规定开发规范

3.接口的特性:

  • 接口是隐式抽象的,声明时不需要使用abstract关键字
  • 接口中的方法也是隐式抽象的,声明时同样不需要使用abstract关键字
  • 接口中的方法时公有的
  • 实现类实现接口,也拥有接口中的能力,但是需要实现类自己去实现这个功能

4.接口的使用:

  • 接口的使用只能通过实现类

  • 实现接口使用的关键字:implements,语法格式如下:

    修饰符 class 类名 implements 接口名[,其它接口]{

    }

  • 实现接口必须实现接口中的所有方法,否则类必须声明为抽象类

  • 一个类可以实现多个接口

5.接口间的继承

接口之间同样支持继承,且同样使用extends关键字.且接口之间支持多继承

interface 接口名 extends 接口1[接口2,接口3...]{
    
}

2.内部类

顾名思义,内部类就是在类内部定义的类.

当一个类中成员,也是另一个事物时,就可以把这个事物定义为内部类.

1.内部类分类:

  • 成员内部类:当内部类作为外部类的成员时,就是成员内部类
  • 私有内部类:用private关键字修饰的内部类就是私有内部类
  • 静态内部类:用static修饰的内部类就是静态内部类
  • 局部内部类:方法中的内部类
  • 匿名内部类:有些实现类,没有自己的功能,就是为了重写抽象方法.为了不浪费类名,不使项目中的类过多,就把这种类实现为匿名类

2.成员内部类

  • 是成员就具有成员的特点,就是可以使用成员修饰符来修饰
  • 是类就有类的特点,可以继承,实现...
  • 内部类中可以使用外部的类的内容,包括私有的
  • 在外部类中可以通过内部类的对象使用其成员
  • 成员内部类中不能定义静态的内容,除了静态的常量

示例1:

       public class Outer {
String name="cat";
int a = 10;

public class Inner {
	String name="dog";
	static final int b=2;
	int a = 20;

	public void skr() {
		int a = 30;
		System.out.println(a);
	}
}
public void outter(){
	Inner in=new Inner();
	in.skr();
}
}

3.私有内部类

  • 私有内部类可以使用外部类中的私有内容
  • 外部类使用私有内部类中的私有内容,需要通过内部类对象使用
  • 私有内部类只能在外部类中使用,不能在其它类中使用

示例2:

    public class InnerPrivate {
int a=11;
static int b=12;
private class Inner1{
	int c=11;
	private void innert(){
		System.out.println(a);
		System.out.println(b);
		System.out.println(c);
	}
	
}
private void outert(){
	System.out.println(a);
	System.out.println(b);
	Inner1 inner=new Inner1();
	inner.innert();
}
}

4.静态内部类

  • 静态内部类使用外部类中的成员,需要通过外部类的对象使用,因为内部类是静态的
  • 在几种内部类中,只有静态内部类才可以定义静态的内容.除了静态的常量

示例3:

    public class InnerStatic {
static int a = 666;
int b = 777;

static class Inner2 {
	static final int c = 888;
	int d = 999;

	static void innert() {
		System.out.println(a);
		System.out.println(new InnerStatic().b);
		System.out.println(c);
		System.out.println(new Inner2().d);
	}

}

static void outter() {
	System.out.println(a);
	System.out.println(new InnerStatic().b);
	System.out.println(Inner2.c);
	System.out.println(new Inner2().d);
}
}

5.匿名内部类

  • 匿名内部类的唯一目的只是为了实现接口

  • 匿名内部类有三种使用方式:

    • 接口多态
    • 没有应用接收匿名内部类的对象地址,只能在当前行使用
    • 做方法的参数

示例4:

    public class AnonymousDemo {
public static void main(String[] args) {
	// 1.接口多态
	Dog d = new Dog() {

		@Override
		public void shout() {
			System.out.println("汪汪汪");
		}

	};
	d.shout();
	// 2.直接使用
	new Dog() {

		@Override
		public void shout() {
			System.out.println("汪汪汪汪汪汪");
		}

	}.shout();
	// 3.做方法的参数
	test(new Dog() {

		@Override
		public void shout() {
			System.out.println("汪汪汪汪汪汪汪汪汪汪汪汪汪汪");
		}

	});
}

public static void test(Dog d) {
	d.shout();
}
}

interface Dog {
void shout();
}