java -- 抽象 接口

本文详细解析了抽象类和接口的概念及其使用方法。包括抽象类的定义、特点、使用场景及限制条件,接口的定义、特点及其实现方式。同时对比了抽象类与接口之间的异同点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 抽象

  • 抽象:抽象就是看不懂的
  • 抽象使用的关键词 abstract
  • 1.abstract修饰类 抽象类
  • 2.abstract修饰方法 抽象方法
  • 3.抽象法国法 没有实现部分
  • 注意:抽象类中的抽象方法 强制子类去重写抽象方法
  • 注意:抽象类不能实例化对象(创建对象)
  • 创建对象的方式:比照多态来创建

  • 抽象类注意:
  • 1.成员变量:可以有变量,也可以有常量
  • 2.成员方法:可以有抽象方法,也可以有成员方法
  • 3.构造方法:有
  • 注意:抽象类中不一定有抽象方法,但是抽象方法一定存在抽象类中
  • 注意:抽象类的子类 必须重写抽象父类的所有抽象方法

    public static void main(String[] args) {
    //  父类引用指向子类的对象
    Animal animal = new Cat();
    animal.eat();
    animal.name();
    }
    }
    abstract class Animal{
    final int i = 10;
    public Animal() {
    System.out.println("我是父类的构造方法");
    }
    public abstract void eat();
    public void name() {
    System.out.println("我是成员方法");
    }
    }
    class Cat extends Animal{
        @Override
        public void eat() {
            System.out.println(i);
            System.out.println("猫吃鱼");
        }
    }
    

    打印结果
    这里写图片描述

    1.一个类没有抽象方法 可不可以定义为抽象类 如果可以那么作用是什么?
    作用:禁止创建抽象类的对象出来 只能使用其子类
    2.abstract 与那些关键字不能共存
    abstract 和 static
    static 修饰方法用类名去调用 abstract 修饰抽象方法没有方法的实现,没有实现部分的方法 只能是方法的声明 不能直接调用 所以不能共存
    abstract 和 final
    final修饰方法 不能被重写 abstract修饰方法就是为了子类重写方法所以不能共存
    private 和 abstract
    private 修饰方法 只能本类访问,子类访问不到,谈不上重写,所以不能够共存

二、 接口:
狭义的接口:interface 关键词修饰的,叫做接口
广义的接口:规则

  如何定义接口:interface 接口名{}

接口的特点:
1.接口中只能声明抽象方法
2.如果你不写 public abstract,关键词修饰,接口中声明方法,那么系统会帮你默认添加上
(书写建议:最好写上默认的修饰词)
3.接口也不能实例化对象(谁要用接口,谁就要实现接口中的方法),可以使用多态方式创建实现类的对象
4.接口的实现 使用 implement 关键字

接口注意:
1.成员变量:有但是只能有常量 public static final 常量名 = 初值;当你在接口中声明变量是 系统默认会是public static final修饰

2.成员方法:没有成员方法(只有抽象方法)

3.构造方法:没有构造方法

类与类的关系:继承关系,并且是单继承 和 多继承

类和接口的关系:实现关系,可以单实现,也可以多实现(接口相当于 干爹 继承相当于亲爹)

接口和接口的关系:可以单继承,也可以多继承

public class Demo03 {
public static void main(String[] args) {
    InterA iA = new Person();
    iA.print();
}
}
interface InterA{
public static final int num = 10;
public abstract void print();
}
class Person implements InterA{
//  实现这个方法
@Override
public void print() {
    System.out.println("我是人类的打印");
}
}
//  类与接口的联系
interface InterX{
public abstract void fun();
}
interface InterY{
public abstract void fun1();
}
interface InterZ extends InterX, InterY{

}
class Car implements InterX, InterY{
@Override
public void fun() {
    System.out.println("我是fun");
}
@Override
public void fun1() {
    System.out.println("我是fun1");
}
}

总结:
接口更像是抽象类的另一种形式,因为接口只可以有抽象方法,没有抽象类可以实现其他部分的方法,但是接口的优势在与可以多继承,在实际编程设计中抽象类中要考虑到子类的所有共同属性和方法,但是接口就不需要,因为接口是针对一种规则的描述,在同一类中实现多个接口,在设计阶段大大降低了难度
抽象类与接口的异同点:
他们的共同点:
1) 都不能被实例化
2) 都能包含抽象的方法,这些抽象的方法用于描述类具备的功能,但是不给提供具体的实现。他们的不同点
1) 在抽象类中可以写非抽象的方法,从而避免在子类中重复书写他们,这样可以提高代码的复用性,这是抽象类的优势;接口中只能有抽象的方法。
2) 一个类只能继承一个直接父类,这个父类可以是具体的类也可是抽象类;但是一个类可以实现多个接口(可以多继承)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值