目录
一、抽象类
概念
我们知道,重写是为了在子类中把父类中的方法重新再写一遍。
这样每个子类就可以实现它自己的功能。
那么父类是不是就当作一个模板了呢?
我们把这个当作模板的父类可以叫做抽象,例如:
abstract class shape{
public abstract void draw();
}
细节
接下来讲解一下抽象类的注意事项:
1.抽象类里可以有普通方法和普通变量。
abstract class shape{
public int a;
public void init(){
System.out.println("你好");
}
public abstract void draw();
}
2.一个类作为抽象类后,是不可以被实例化的,所以这个抽象类就是用来被继承的。
3.如果一个普通类继承了抽象类,那么这个普通类必须重写这个抽象类的所有抽象方法。
4.抽象方法也可以向上转型。
public class Test {
public static void main(String[] args) {
Shape shape = new Circle();
shape.draw();
}
}
5.一个抽象类A继承了一个抽象类B,那个抽象类A可以不重写B的抽象方法。
6.但是当一个普通类继承了,这个普通类必须重写A和B的所有抽象方法。
abstract class Shape{
public abstract void draw();
}
abstract class Type extends Shape{
public abstract void setBounds();
}
class rect extends Type{
@Override
public void draw() {
System.out.println("a");
}
@Override
public void setBounds() {
System.out.println("b");
}
}
7.最后抽象方法不能被final修饰。
二、接口
引例
学完继承,我们知道Java没有多继承。
接口正是来弥补这个遗憾的。
比如我们创建一个动物类,还有许多它的子类,比如猫、鸟来继承动物。
猫会跑,鸟会飞,都是自己的特性,不能写入动物大类。
再来一条狗,也会跑,但是这样写很多跑的方法就太麻烦了。
所以跑可以写成一个接口,代表动物的能力。
//动物大类
class Animal{
public String name;
public Animal(String name){
this.name = name;
}
}
//会跑
interface IRunning{
void run();
}
//会飞
interface IFlying{
void fly();
}
//鸟类
class Bird extends Animal implements IFlying{
public Bird(String name) {
super(name);
}
@Override
public void fly() {
}
}
//狗类
class Dog extends Animal implements IRunning{
public Dog(String name) {
super(name);
}
@Override
public void run() {
}
}
//未知生物,又会飞,又会跑
class Unknown extends Animal implements IRunning, IFlying{
public Unknown(String name) {
super(name);
}
@Override
public void run() {
}
@Override
public void run() {
}
}
细节
上面是一个总的例子,接下来我们来看接口的具体细节:
1. 接口中的方法默认都是public abstract的抽象方法,但也存在静态方法
interface IRunning{
public static void walk(){
System.out.println("a");
}//可以有静态方法
void run();//原型public abstract void run();
}
2.接口中的变量默认都是public static final的,所以必须要赋初值
3.接口不能被new实例化,但可以向上转型
4.当一个类实现一个接口,必须重写接口中的抽象方法
5.当一个类实现一个接口,重写方法前必须写public,因为接口的抽象方法默认就是pubic的,不能低于public
6.如果一个接口A继承一个接口B,这里的继承意味着拓展,类似于抽象类继承抽象类
interface IRunning{
void run();
}
interface IWalking extends IRunning{
void walk();
}
码字不易,望大佬点赞👍。会回访,大家一起学习🎉。