Java第一阶段复习_Day10

一.异常的补充
1.finally关键字中紧接catch关键字之后,放入必须要执行的代码。

package Practice;

public class Practice_06 {
    
    

	public static void main(String[] args) {
    
    

		Method4();

	}

	public static void Method4() {
    
    

		try {
    
    
			System.out.println(1);
			System.out.println(2);

			System.out.println(1 / 0);// 故意设置一个异常,之后的代码不会执行。

			System.out.println(3);
			System.out.println(4);

		}catch (Exception e) {
    
    
			
			System.out.println("运行错误");

		}finally {
    
    //finally中通常放入必须要执行的代码。
			
			System.out.println(3);
			System.out.println(4);
			
		}

	}

}

在这里插入图片描述
二.接口
1.定义:Java里面由于不允许多重继承,所以如果要实现多个类的功能,则可以通过实现多个接口来实现。Java接口和Java抽象类代表的就是抽象类型,就是我们需要提出的抽象层的具体表现。OOP面向对象的编程,如果要提高程序的复用率,增加程序的可维护性,可扩展性,就必须是面向接口的编程,面向抽象的编程,正确地使用接口、抽象类这些太有用的抽象类型做为java结构层次上的顶层。

2.特点:
<1>接口中都是抽象方法。
<2>通过interface关键字创建接口。
<3>通过implements让子类来实现。
<4>可以理解成,接口是一个特殊的抽象类。
<5>接口突破了java的单继承的局限性。
<6>接口和类之间可以多实现,接口和接口之间可以多继承。
<7>接口是对外暴露的规则,是一套开发规范。
<8>接口提高了程序的功能扩展,降低了耦合性。
<9>接口没有构造方法。

3.简单案例

package Practice;

public class Practice_09 {
    
    

	public static void main(String[] args) {
    
    
		
		Inter i = new InterImpl();//多态。
		System.out.println(i.age);//正常调用父类的成员变量。
		System.out.println(Inter.age);//通过类名直接调用静态成员变量。
		i.save2();//通过变量名调用接口中的普通方法。
	}

}

interface Inter{
    
    
	
	//1.接口中没有构造方法。
	
	//2.接口中没有成员变量,在接口中为缩写,省略了static,final等常量修饰关键词。
	int age = 10;
	
	//3.接口中的抽象方法。
	public abstract void save();
	
	//4.接口中也有普通方法。
	default void save2() {
    
    
		System.out.println("保护2");
	}
	
}

class InterImpl extends Object implements Inter{
    
    //实现类先继承Object,再实现接口。
	//所有类,都是Object类的子类。
	
	public InterImpl() {
    
    //子类的构造方法。
		super();//省略了super,由于接口没有构造方法,那么找的是Object。
	}
	
	public void save() {
    
    //在实现类中重写抽象方法。
		
	}
	
	public void save2() {
    
    //重写普通方法。
		System.out.println("保护4");
	}
	
}

三.接口的复杂用法

package Practice;
//接口的复杂测试。
public class Practice_10 {
    
    

	public static void main(String[] args) {
    
    
		
		Fu3 f = new Fu3Impl();//左边写接口后边写实现类。
		f.delete();
		f.save();

	}

}
interface Fu1{
    
    
	
	public void save();
	
}

interface Fu2{
    
    
	
	public void delete();
	
}

//接口和接口之间可以进行继承和多继承。
interface Fu3 extends Fu1,Fu2{
    
    
	
}

//接口和类之间可以进行实现和多实现。
class Fu3Impl implements Fu3{
    
    
	
	@Override
	public void save() {
    
    
		
		System.out.println("保存");
		
	}
	
	@Override
	public void delete() {
    
    
		
		System.out.println("删除");
		
	}
	
}

五.接口和抽象类总结
<1>类和类的关系:继承 extends / 单继承 / 单根继承。
1.继承的意义:为了提高代码的复用性,减少了代码的编写提高开发效率。
2.方法重写的意义:不修改父类源码的前提下,在子类中重写业务,从此使用的就是重写后的功能。
3.要求子类的方法声明和父类一样,只要改方法体。
4.有了继承有了重写就产生了多态,多态的意义:为了统一程序的调用标准,标准就是父类。
5.多态 也就是向上转型/向上造型。
6.向下造型的意义:很少用,相当于想要使用子类的特殊功能,还不如直接创建子类对象简单。
7.class A extends B,其中,A和B都是类,A是子类,B是父类,A就拥有了B的所有功能(除了私有的和构造方法)。

<2>类和接口关系:实现implements / 单实现 / 多实现
1.class A implements B,C, 其中,A是实现类,B和C是接口。
2.要求A 可以把 B 和C 接口里的所有 抽象方法 都重写掉,否则 A 就是抽象类。
3.接口不能创建对象。
4.接口里没有构造方法,接口里都是常量,接口里都是抽象方法。

<3>接口和接口关系:继承extends / 单继承 / 多继承
1.接口的多继承的关系,打破了java单继承的局限性
2. interface A extends B,C,其中,A B C 都是接口,A是子接口,同时拥有B和C接口里的所有功能。
3.class AImpl implements A,要求AImpl需要重写A接口里的所有方法(是包含B和C接口的所有方法),否则就是抽象类。

<4>接口和抽象类的区别!!!
1.相同点:都是抽象层,都不能实例化。
2.抽象类用abstract关键字描述,接口用interface。
3.子类和抽象类之间是extends关系,实现类和接口之间是implements关系。
4.抽象类中可以有构造方法 ,接口里不能出现构造方法。
5.抽象类里可以有变量,接口里没有变量全都是静态的常量。
6.接口里定义常量的语法:public static final String NAME=“jack”。
7.抽象类里可以有普通方法,也可以有抽象方法,接口都是抽象方法。
8.抽象类和子类之间是继承关系,而且java中,只支持单继承。
9.接口突破了java单继承的局限性,接口可以多继承也可以多实现,甚至可以继承的同时多实现。
10.多继承: interface A extends B,C 其中A是子接口,同时拥有自己的和BC的功能。
11.多实现: class AImpl implements M,N,O,P 其中AImpl是实现类,需要同时重写MNOP的所有抽象方法,否则就是一个抽象类。
12.继承的同时多实现: class AImpl extends Object implements M,N 一定是先继承后实现。

猜你喜欢

转载自blog.csdn.net/weixin_41858806/article/details/115060220