抽象类(加拓展final关键字)+java(接口)

抽象类基本语法

抽象类
1.如何定义抽象类?
	class关键字前加abstract
2.抽象类无法被实例化,抽象类无法创建对象
public abstract class A{
	public static void main(String[] args){
		A a1 = new A(); //这条语句执行会报错,因为抽象类无法实例化,即无法创建新的对象	
		
	}

	public A(){
		System.out.printlm("sss"); //虽然无法被实例化,但是也有构造方法
	}
}
public B extends A{	
	public B(){
		super();//通过super关键字访问父类构造方法,从这也可以看到super并没有创建新的对象
	}

}
3.虽然抽象类没有办法实例化,但是抽象类也有构造方法,该构造方法是给子类创建对象用的(子类是通过super访问父类的构造方法)

4.抽象类中可以定义抽象方法。
	抽象方法的语法:在方法的修饰符列表中添加abstract关键字,并且抽象方法应该以';' 结束不能带有'{}'
	例如:public abstract void m1();  

5.当一个非抽象子类继承一个含有抽象方法的抽象类时,必须在子类中对这个抽象方法进行重写否则会报错 
	err:The type B must implement the inherited abstract method A.m10l
6.一个非抽象类的类继承抽象类,必须将抽象类中的抽象方法覆盖,实现,重写

}

7.抽象类不能被final修饰
public final abstract class	A{} //这个会报错的
抽象方法不能被final修饰
public final abstract void m1();   同样会报错    //总结final和abstract不能共存

深入final关键字

public class Test{
	public static void main(String[] args)
	{
		final Customer c = new Customer("JACK",15); //这样的语法是正确的,final可以在创建对象的		时候使用
		c = new Customer("Bob",16);//这行命令无法执行,因为使用了final之后代表了c的内存地址被锁住		了无法再更改为其他对象的内存地址
		c.name = "Bob";
		c.age = 16; //这两句代码时允许的,因为对象内部的数据是可以更改的,锁住的只是对象的内存地址
		
	}
}
public class Custmoer{
	public String name;
	public int age;
	public Customer(String n,int a){
		this.name = name;
		this.a = age;
	}
}



接口

/*
	接口也是一种引用类型,可以等同看做类。
	1.如何定义接口,语法;
		[修饰符] interface 接口名{}
	2.接口中只能出现常量:常量、抽象方法

	3.接口尤其是一个特殊的抽象类,特殊在接口是完全抽象的。

	4.接口中没有构造方法,无法被实例化。

	5.接口和接口之间可以多继承。

	6.一个类可以实现多个接口。(这里的“实现”可以等同看作“继承”)

	7.一个非抽象的类可以实现接口,需要将接口中所有的方法“实现/重写/覆盖”
	
*/
public interface A{
	//常量(必须要用public static final修饰)
	public static final String SUCCESS = "success";
	public static final double PI = 3.14;

	byte MAX_VALUE = 12;//常量
	//抽象方法

	//抽象方法(接口中所有的抽象方法都是public abstract)
	public abstract void m1();
	
	//public abstract 是可以省略的
	void m1();
	
}

1.可以实现多继承
public interface A{
void m1();
}
public interface B{
void m2();
}
public interface C{
void m3();
}

public interface Test extends A,B,C{  //这代表接口和接口之间可以多继承
	void m4();  	
}
一个类实现多个接口 通过implements关键字来连接
implements代表实现的意思
implementsextends意义相同
class MyClass implements B,C{	 // 代表了一个实现了多个接口
	public void m2(){}
	public void m3(){} //代表要重写实现接口里的所有抽象方法
}

class F implements E{
	public void m1(){}
	public void m2(){}
	public void m3(){}
	public void m4(){}  //同样代表要实现接口里所有的抽象方法
	}


接口的作用(应用)
1.可以使项目分层,所有层都面向接口开发,开发效率提高了。
在这里插入图片描述

这里理解为,一个只需要写接口里的实现方法,另一个只需要去调用接口里的方法,都是面对接口。

2.接口使代码和代码之间的耦合度降低,就像内存条和主板之间的关系,变得可”插拔“

首先会写一个接口
public interface CustomerService{
	public void quit();
}

会需要有人去写这个接口的实现类
 
 public CustomerServericeImp implements CustomerServerice{
	public void quit(){
		System.out.println("系统成功退出")
	}
}

public class Test{
	public static void main(String[] args){
		CustmoerServerice c1 = new CustomerServericeImp();//多态,(要点:编译期看左边,执行阶段		看右边,具体对象内的quit()函数)

		c1.quit(); //程序执行完毕会,会输出:系统成功退出
	}

}

通过汽车与引擎的例子,其中引擎有不同的品牌

//引擎作为接口,引擎生产厂家面向他,汽车页面向它
public interface Engnie{
	public void start();
}
public class YAMAHA implements Engine{
	public void start(){
		System.out.println("YAMAHA Start!");
	}
}
public class HONDA implements Engine{
	public void start(){
		System.out.println("HONDA Start!");
	}
}

public class Car{
	Engnie engnie;
	public Car(Engnie e){
		this.engnie = e;
	}
	public void carTest(){
		e.start()}
}






发布了28 篇原创文章 · 获赞 0 · 访问量 435

猜你喜欢

转载自blog.csdn.net/wenshao007/article/details/104358675
今日推荐