抽象类
- 什么是抽象类
1、抽象类怎么定义?在class前添加abstract关键字就行了。
//这就是一个抽象类
public abstract class student{
}
2、抽象类是无法实例化的,无法创建对象的,所以抽象类是用来被子类继承的。
//错误,抽象类不可创建对象
student ssr=new student();
3、final和abstract不能联合使用,这两个关键字是对立的。
//这样是错误的,抽象类目的是让别人来实现它
//而final是不可被继承的,两者对立,不可同时使用
public final abstarct classs student{
}
4、抽象类的子类可以是抽象类。也可以是非抽象类。
5、抽象类虽然无法实例化,但是抽象类有构造方法,这个构造方法是供子类使用的。
6、抽象类中不一定有抽象方法,抽象方法必须出现在抽象类中。
7、抽象方法怎么定义?
//抽象方法
public abstract void doSome();
8、一个非抽象的类,继承抽象类,必须将抽象类中的抽象方法进行覆盖/重写/实现。
//创建一个抽象类
public abstract A{
public abstract int sum(int x, int y);
public abstract int sun(int x, int y);
}
//B继承A时,要将A的抽象方法重写
public class B extends A{
//重写sum方法
public int sum(int x,int y){
return x+y;
}
//重写sun方法
public int sun(int x,int y){
return x-y;
}
}
9、java语言中凡是没有方法体的方法都是抽象方法?
不对,错误的。
Object类中就有很多方法都没有方法体,都是以“;”结尾的,但他们都不是抽象方法,例如:
public native int hashCode();
这个方法底层**调用了C++**写的动态链接库程序。
前面修饰符列表中没有:abstract。有一个native。表示调用JVM本地程序
接口
接口的基础语法
1、接口是一种“引用数据类型”。
2、接口是完全抽象的。(抽象类是半抽象的)
3、接口怎么定义:[修饰符列表] interface 接口名 {}
//接口的定义
public interface student{
}
4、接口支持多继承。
public interface A{}
public interface B{}
//C可以同时继承A、B
public interface C implements A,B{
}
5、接口中只有常量+抽象方法。
6、接口中所有的元素都是public修饰的
7、接口中抽象方法的public abstract可以省略。
//抽象方法可以直接这样定义
int sum(int x,int y);
8、接口中常量的public static final可以省略
//常量可以直接这样定义
double PI=3.1415926;
9、接口中方法不能有方法体。接口中的方法都是抽象方法10、一个非抽象的类,实现接口的时候,必须将接口中所有方法加以实现。
public interface A{
int sum(int x,int y);
int sun(int x,int y);
}
//非抽象的类
public class B implements A{
//重写sum方法
public int sum(int x,int y){
return x+y;
}
//重写sun方法
public int sun(int x,int y){
return x-y;
}
11、一个类可以实现多个接口。
public interface A{}
public interface B{}
//用class修饰的C也可以同时实现A、B
public class C implements A,B{
12、extends和implements可以共存,extends在前,implements在后。
//父类
public class A{}
//接口
public interface B{}
//C可以继承A然后实现B接口
public class C extends A implements B{
}
13、使用接口,写代码的时候,可以使用多态(父类型引用指向子类型对象)。
接口在开发中的作用
注意:接口在开发中的作用,类似于多态在开发中的作用。
多态:面向抽象编程,不要面向具体编程。降低程序的耦合度。提高程序的扩展力。
//创建一个类
public class Master{
public void feed(Dog d){}
public void feed(Cat c){}
//假设又要养其它的宠物,那么这个时候需要再加1个方法。(需要修改代码了)
//这样扩展力太差了,违背了OCP原则(对扩展开放,对修改关闭。)
}
//
public class Master{
public void feed(Animal a){
// 面向Animal父类编程,父类是比子类更抽象的。
//所以我们叫做面向抽象编程,不要面向具体编程。这样程序的扩展力就强。
}
}
接口在开发中的作用?
1、接口是不是完全的?是。
2、而我们以后正好要求,面向抽象编程。
3、面向抽象编程这句话以后可以修改为:面向接口编程。
4、有了接口就有了可插拔。可插拔表示扩展力很强。不是焊接死的
5、主板和内存条之间有插槽,这个插槽就是接口,内存条坏了,可以重新买一个换下来。这叫做高扩展性。(低耦合度。)
6、总结一句话:三个字解耦合
面向接口编程,可以降低程序的耦合度,提高程序的扩展力。符合OCP开发原则。
7、接口的使用离不开多态机制。(接口+多态才可以达到降低耦合度。)
接口可以解耦合!
任何一个接口都有调用者和实现者。
接口可以将调用者和实现者解耦合。
调用者面向接口调用。
实现者面向接口编写实现。
以后进行大项目的开发,一般都是将项目分离成一个模块一个模块的,模块和模块之间采用接口衔接。降低耦合度。
抽象类和接口有什么区别
在这里我们只说一下抽象类和接口在语法上的区别
- 抽象类是半抽象的,接口是完全抽象的。
- 抽象类中有构造方法,接口中没有构造方法。
- 接口和接口之间支持多继承,类和类之间只能单继承。
- 一个类可以同时实现多个接口,一个抽象类只能继承一个类(单继承)
- 接口中只允许出现常量和抽象方法。