栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

008—JAVA中的抽象类与接口细数知识点

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

008—JAVA中的抽象类与接口细数知识点

抽象类: 对一类事物共有特征的描述 但是不能创建对象
抽象方法: 规定此类事物必须有的操作

例如           Animal    (Cat  Dog 实现了Animal  则必须能吃饭  必须能睡觉    即必须实现父                                类的抽象方法) 

描述的是客观世界  is  a  的关系

注意:1.声明抽象类 abstract class 类名{}

           2.声明抽象方法 abstract 返回值类型 方法名(); 抽象方法没有方法体

抽象类的作用严格的规范子类的行为

public abstract class Animal {
    String name;
    int age;

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void show(){
        
    }
}
抽象类除了不能创建对象,抽象类可以拥有普通类的属性方法构造器,普通类中有的,抽象类中也可以有。 抽象类中可以没有抽象方法 抽象方法必须在抽象类中 子类必须 实现 抽象类中所有的抽象方法 否则 此类也要变为抽象类 抽象方法不能被 private  static final 修饰(因为一旦被修饰该方法就不能被重写了)
接口的知识
继承是一个is a的关系  而接口描述的是has a的关系
如果一个类实现了一个接口,可以把这个类看作是接口的一个子类。可以被认为是父亲和孩子的关系。此时可以使用多态。 FlyAble flyAble = new Bird();
flyAble.fly();
接口必须被实现之后才可以被应用,接口不能够创建对象。

public interface FlyAble {

    public abstract void fly();

}
public class SuperMan implements FlyAble{

    @Override
    public void fly() {
        System.out.println("超人飞......");
    }
}

class Bird implements FlyAble{
    @Override
    public void fly() {
        System.out.println("小鸟自由自在的飞....");
    }
}
public class Test {
    public static void main(String[] args) {
        SuperMan superMan = new SuperMan();
        superMan.fly();

        FlyAble flyAble = new Bird();
        flyAble.fly();

    }
}
接口的成员       1>接口中没有普通变量      都是 全局静态常量 默认被 public static final 修饰       2>接口中没有普通的非静态方法。(比如 :public void test(){}   会报错)       3>接口中可以有静态方法(接口内可以有静态的方法 jdk8提供的)         (默认被 public 修饰)        4>接口内可以有抽象方法    (默认被 public abstract 修饰)(抽象方法没有方法体)              但是如果全是抽象方法的话,不利于接口的扩展,比如两个类A,B都实现了某个接口,只需要A类重写某个方法,此时的话,B类也必须重写。(因为抽象方法)         5>引出了默认方法     (默认方法默认被public修饰)(子类可以重写或者补充些)           public default void test2(){}
接口可以被类多实现         一个类可以实现多个接口   (class D implements A,B{})、         一个接口可以继承多个接口(打破了类的单继承性),但是不能实现多个接口。(interface E extends A,B,C{ void e(); })             (interface F implements D{}   报错)         一个类实现接口  必须重写/实现 所有的抽象方法  否则 此类也要变为抽象类         接口可以多继承         一个类既有接口的实现又有类的继承,继承优先(先使用继承中的方法)
public interface A {
    public default void a(){
        System.out.println("haohaoxuexi");
    }
}

interface B{
    void b();
}
interface C{
    void c();
}
interface E extends A,B,C{
    void e();
}

class F{
    public void a(){
        System.out.println("好好学习");
    }
}
class D extends F implements A,B{



    @Override
    public void b() {

    }
}

       

public class Test {
    public static void main(String[] args) {
        D d = new D();
        d.a();
    }
}
当一个类实现了多个接口  接口内有同名的默认方法  此类必须重写 重写后想要使用某个接口内的默认方法     接口名.super.方法名()

 

public class Test {
    public static void main(String[] args) {
        Boy boy = new Boy();
        boy.play();
    }
}

interface YangMi{
    public default void play(){

        System.out.println("YangMi 过来玩儿 小伙子 ");
    }
}
interface WuJing{
    public default void play(){

        System.out.println("YangMi 过来玩儿 小伙子 ");
    }
}
class Boy implements YangMi , WuJing{
    @Override
    public void play() {
        System.out.println("自己玩");
        WuJing.super.play();
        YangMi.super.play();
    }
}
当一个类继承了另一个类实现了另一个接口,如果类和接口中有同名的成员变量,在调用的时候必须指明谁调用的,否则会有模棱两可的错误
public interface A {
        int x = 0;
    }

    class B {
        int x = 1;
    }

    class C extends B implements A{
        public void pX(){
    //        System.out.println(x);
            System.out.println(new B().x);
            System.out.println(A.x);
        }
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/345262.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号