173/174接口的抽象方法定义和抽象方法的使用

抽象方法的定义格式:

修饰符 abstract 返回值类型 方法名称(参数列表);

一个方法写上abstract关键字,去掉{},就是抽象方法

含有抽象方法的类,一定是一个抽象类.

抽象类的格式:

修饰符 abstract class 类名称 {

//...

}

抽象类的使用:

抽象方法不能直接new对象

必须定义一个子类继承抽象类

子类必须覆盖重写抽象类中所有抽象方法 去掉abstract关键字,加上{}

创建子类对象

通过子类对象调用方法

抽象类的注意事项:

抽象类不能创建对象,如果创建,编译无法通过而报错.只能创建其非抽象子类的对象

抽象类中,必须有构造方法,是供子类创建对象时,初始化父类成员使用的

抽象类中,不一定包含抽象方法,但是有抽象类方法的类必定是抽象类

抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错.除非该子类也是抽象类

(1)接口定义前默认修饰符为public。

(2)接口中变量默认修饰符为public static final。

(3)接口中方法默认的访问权限为public。

复制代码
/*
接口就是多个类的公共规范。
接口是一种引用数据类型,最重要的内容就是其中的:抽象方法。

如何定义一个接口的格式:
public interface 接口名称 {
    // 接口内容
}

备注:换成了关键字interface之后,编译生成的字节码文件仍然是:.java --> .class。

如果是Java 7,那么接口中可以包含的内容有:
1. 常量
2. 抽象方法

如果是Java 8,还可以额外包含有:
3. 默认方法
4. 静态方法

如果是Java 9,还可以额外包含有:
5. 私有方法

接口使用步骤:
1. 接口不能直接使用,必须有一个“实现类”来“实现”该接口。
格式:
public class 实现类名称 implements 接口名称 {
    // ...
}
2. 接口的实现类必须覆盖重写(实现)接口中所有的抽象方法。
实现:去掉abstract关键字,加上方法体大括号。
3. 创建实现类的对象,进行使用。

注意事项:
如果实现类并没有覆盖重写接口中所有的抽象方法,那么这个实现类自己就必须是抽象类。
 */
public class Demo01Interface {

    public static void main(String[] args) {
        // 错误写法!不能直接new接口对象使用。
//        MyInterfaceAbstract inter = new MyInterfaceAbstract();

        // 创建实现类的对象使用
        MyInterfaceAbstractImpl impl = new MyInterfaceAbstractImpl();
        impl.methodAbs1();
        impl.methodAbs2();
    }

}



/*
在任何版本的Java中,接口都能定义抽象方法。
格式:
public abstract 返回值类型 方法名称(参数列表);

注意事项:
1. 接口当中的抽象方法,修饰符必须是两个固定的关键字:public abstract
2. 这两个关键字修饰符,可以选择性地省略。(今天刚学,所以不推荐。)
3. 方法的三要素,可以随意定义。
 */
public interface MyInterfaceAbstract {

    // 这是一个抽象方法
    public abstract void methodAbs1();

    // 这也是抽象方法
    abstract void methodAbs2();

    // 这也是抽象方法
    public void methodAbs3();

    // 这也是抽象方法
    void methodAbs4();

}
复制代码

 

复制代码
抽象方法的作用: 

        强制要求子类重写

举例:

    /*
    *   Animal父类抽象类:
    *       class 前面有abstract关键字修饰的
    * */
    public abstract class Animal {
        
        //抽象方法
        //因为所有子类吃的东西,方法实现都不一样
        public abstract void eat();
    }

// Cat子类继承Animal父类 public class Cat extends Animal{ // 父类中的eat方法会被要求强制重写 @Override public void eat () { } }
复制代码
复制代码
public abstract class Animal {
    //抽象方法
    public abstract void eat();
}



public class Cat extends Animal { @Override public void eat(){ System.out.println("猫吃鱼"); } } public class DemoMain { public static void main(String[] args) { Cat cat=new Cat(); cat.eat(); //猫吃鱼 } }
复制代码

 

posted @   ja不会va  阅读(125)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示