一、抽象类
1、抽象类
1)抽象类无法实例化,无法创建对象
2)抽象类:是类和类之间的共同特征,将这些具有共同特征的类再进一步抽象形成了抽象类,由于类本身是不存在的,所以抽象类无法创建对象,抽象类与抽象类之间也还有共同特征,还可以再一步抽象
3)抽象类是无法实例化的,无法创建对象的,所以抽象类是用来被子类继承的,final和abstract是不能一起用的,是对立的
4)抽象类的子类可以是抽象类
5)抽象类虽然无法实例化,但是有构造方法,这个构造方法是供子类使用的
2、抽象类属于什么类型
抽象类属于引用数据类型
3、抽象类的定义
[修饰符列表] abstract class 类名{
类体;
}
4、抽象方法
抽象方法:表示没有实现的方法,没有方法体的方法,没有方法体,以分号结尾,修饰符列表中有abstract关键字
抽象类中不一定有抽象方法。但抽象方法必须在抽象类中
重点::一个非抽象的类继承抽象类,必须将抽象类中的抽象方法实现了
public abstract void doSome();
public class AbstractTest02{
public static void main(String[] args){
Animal a = new Bird();
// 这就是面向抽象编程。
a.move();
Animal x = new Cat();
x.move();
}
}
// 动物类(抽象类)
abstract class Animal{
// 抽象方法
public abstract void move();
}
// 子类(非抽象的)
// 错误: Bird不是抽象的, 并且未覆盖Animal中的抽象方法move()
/*
class Bird extends Animal{
}
*/
class Bird extends Animal{
// 必须把抽象的方法实现了。
public void move(){
System.out.println("鸟儿在飞翔!");
}
}
class Cat extends Animal{
public void move(){
System.out.println("猫在走猫步!");
}
}
// 如果Bird是抽象类的话,那么这个Animal中继承过来的抽象方法也可以不去重写/覆盖/实现。
/*
abstract class Bird extends Animal{
}
*/
二、接口
1、接口
1.1接口也是一种引用数据类型,编译之后也是class字节码文件
1.2接口是完全抽象的,(抽象类是半抽象的),或者说是接口是特殊的抽象类
1.3接口的语法
[修饰符列表] interface 接口名{
}
1.4、接口支持多继承,一个接口可以继承多个接口
类和类之间叫继承,类和接口之间叫做实现。可以将“实现”看作“继承”
1.5、接口中只包含两部分内容,一部分:常量,一部分:抽象方法
1.6、接口中所有的元素都是public修饰(都是公开的
1.7、接口中的抽象方法public abstract可以省略,当然方法是抽象的,不能有方法体
1.8、接口中常量的public static final可以省略
1.9、实现使用implements关键字完成,继承使用extends关键字完成
1.10、当一个非抽象的类实现接口的话,必须把接口中所有的抽象方法全部实现
2、接口的基础语法
public class Test01{
public static void main(String[] args){
}
}
interface A{
}
interface B{
}
// 一个接口可以继承多个接口,多继承
interface C extends A,B{
}
interface MyMath{
// public static final double PI = 3.14;
double PI = 3.1415926;
int sum(int a,int b);
int sub(int a,int b);
}
1.11、一个类可是实现多个接口
public class Test02{
public static void main(String[] args){
// 多态
MyMath mm = new MyMathImp1();
int result = mm.sum(10,20);
}
}
interface MyMath{
double PI = 3.1415926;
int sum(int a,int b);
int sub(int a,int b);
}
class MyMathImp1 implements MyMath{
// 实现接口中的方法
public int sum(int a,int b){
return a + b;
}
public int sub(int a,int b){
return a - b;
}
/*错误:正在尝试分配更低的访问权限,之前为public
int sub(int a,int b){
return a - b;
}
*/
}
1.12、接口和接口之间在进行强制类型转换的时候,没有继承关系,也可以强转
但是一定注意,运行时可能会出现ClassCastException异常,类转换异常
public class Test03{
public static void main(String[] args){
A a = new D();
B b = new D();
C c = new D();
// B b2 = (B)a;// 这样是可以的
if (a instanceof B){
B b2 = (B)a;
}
}
}
interface A{
void m1();
}
interface B{
void m2();
}
interface C{
void m3();
}
class D implements A,B,C{
// 实现A接口中的方法
public void m1(){
}
// 实现B接口中的方法
public void m2(){
}
// 实现C接口中的方法
public void m3(){
}
}
3、继承和实现一起使用
extends关键字在前,implements关键字在后
class Animal{
}
// 接口通常提取的是行为动作
interface Flyable{
void fly();
}
class Cat extends Animal implements Flyable{
public void fly(){
System.out.println("猫猫zai飞翔");
}
}
// 蛇类,不想让他飞,不实现Flyable接口就可以
class Snake extends Animal{
}
三、抽象类和接口的区别
只说一下抽象类和接口在语法上的区别- 抽象类是半抽象的
- 接口是完全抽象的
- 抽象类中有构造方法
- 接口中没有构造方法
- 接口和接口之间支持多继承
- 类和类之间只能单继承
- 一个类可以同时实现多个接口
- 一个抽象类只能继承一个类(单继承)
- 接口中只允许出现常量和抽象方法
标签:--,void,接口,public,int,抽象,JavaSE,抽象类 From: https://www.cnblogs.com/hyy-0/p/17612006.html