1、抽象类
定义:
在面向对象的概述中,所有的对象都是通过类来描述的,但是反过来,并不是所有类都是描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
特点:
1、抽象类中可以存在抽象方法,抽象方法被abstract修饰,该方法可以没有具体实现(但反过来,当一个类中存在抽象方法时,该类必须是抽象类)。
2、抽象类可以和普通类一样存在成员变量和成员方法。
3、抽象类不能被实例化,但是可以被继承。
4、当一个普通类继承抽象类之后,这个普通类必须要重写这个抽象类中所有的抽象方法。
语法:
被abstract修饰。
代码:
//抽象类
abstract class Shape{
String color; //成员变量
public void shape(){ //成员方法
}
//抽象方法
public abstract double calS();
public abstract double calC();
//构造方法
public Shape(String color) {
this.color = color;
}
}
class Ract extends Shape{
//长和宽
private int a;
private int b;
//重写构造方法
public Ract(String color , int a,int b) {
super(color);
this.a = a;
this.b = b;
}
//子类继承抽象类,必须重写里面所有的构造方法,且重写方法的访问修饰限定符必须要大于等于抽象类中的
@Override
//长方形的面积
public double calS() {
return this.a * this.b;
}
@Override
//长方形的周长
public double calC() {
return 2*(this.a + this.b);
}
}
注意事项:1、static、final、private和abstract不能共存,即被abstract不能被static、final、private修饰(原因:这三个关键字修饰的方法都不能被重写,而abstract修饰的方法必须被重写)。
2、当一个普通类B继承抽象类A后不想重写其中的抽象方法,此时可以把B也设置为抽象类,那么当一个普通类C继承抽象类B后,必须要重写B和A中所有的抽象方法(可以理解为:欠的债,总是要还的)。
2、 接口
定义:
接口是多个类的公共规范,是一种引用数据类型。(类实现接口可以看作类具有xxx特性)。
特点:
1、接口中的成员变量默认为public static final的(常量),接口中的成员方法默认是public abstract的(抽象方法)。(在阿里巴巴开发手册中写道:在接口中的成员变量和成员方法无需修饰,这样能够使代码更加简洁)。
2、接口中不可以有普通的方法,但是Java8后开始允许在接口中定义default方法,这种方法可以有具体实现。
3、接口中的方法如果被static修饰,那么也可以有具体实现。
4、接口不能通过new实例化。
5、通过关键字implements来实现接口。
6、接口也可以实现向上转型和动态绑定。
语法:
通过interface定义,通过implements实现。
代码:
//接口1
public interface ISleeping {
int sleephour = 7; //常量 默认public static final修饰
void sleep(); //抽象方法 默认public abstract
}
//接口2
public interface ISwimming {
//抽象方法
void swim();
}
//实现接口1和接口2的鱼类
public class Fish implements ISwimming,ISleeping {
String name;
String color;
//构造方法
public Fish(String name, String color) {
this.name = name;
this.color = color;
}
//重写swim方法
@Override
public void swim() {
System.out.println("小鱼" + this.name + "在游泳");
}
//重写sleep()方法
@Override
public void sleep() {
System.out.println("小鱼" + this.name + "在睡觉" + "睡眠时长" + sleephour);
}
public static void test1(ISwimming iSwimming){//只要实现了这个接口就可以向上转型
iSwimming.swim();
}
public static void test2(ISleeping iSleeping){
iSleeping.sleep();
}
public static void main(String[] args) {
Fish fish = new Fish("小小","红色");
test1(fish);
test2(fish);
}
}
注意事项:1、当一个类实现接口中的方法之后,当前类中的方法必须加上public。
2、接口中不能由构造方法和代码块。
3、一个接口会产生独立的字节码文件。
4、如果一个类实现了接口,而不想实现接口中的内容,则该类必须为抽象类
标签:color,abstract,接口,抽象类,方法,public From: https://blog.csdn.net/CxK6666667/article/details/144036866