慢慢学习,然后惊呆所有人(七,抽象类与接口)

Posted 韶光不负

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了慢慢学习,然后惊呆所有人(七,抽象类与接口)相关的知识,希望对你有一定的参考价值。

目录

什么是抽象类?

抽象类的使用(抽象类自身无法实例化 !!!)?

抽象类自身为什么不能实例化?

什么是接口?

接口的实现(接口的实现需要创建一个类来实现)

接口是可以多实现的 !!!

实现方法二

jdk8.0增加的新特性:


相信大家对前面的文章理解对Java有一定的理解,下面就让我们继续对Java继续学习吧!

 

 

什么是抽象类?

如果父类中方法不需要实现(没有方法体),而让子类自己实现的,该方法就可以声明为抽象方法,该类必须是抽象类(简单点来说就是存在abstract关键字修饰

public  abstract Abstract_class{
//声明为抽象类
    public  abstract void an_abstract_class();
    //抽象方法
        
    
}

抽象类的使用(抽象类自身无法实例化 !!!)?

当一个类继承抽象类,该类就必须要实现该类的抽象方法强制子类实现)。

理解误区:(当该类中有抽象方法,则改类一定是抽象类,但当该类是抽象类,类当中的方法不一定全部是抽象方法(抽象方法可以是0个或者多个)

抽象方法:abstract关键字修饰的方法,本质就是强制子类实现。

当一个类继承了抽象类,没有实现继承抽象类的方法,必须将该类声明为抽象类,给其子代实现。

抽象类自身为什么不能实例化?

抽象类自身当中有抽象方法,抽象方法中并没有实现该方法,而是让其子代实现,所以无法实例化,        

解决办法:但可以多态方式实例化(本质是实例子类)与使用内部类实现抽象方法。

public class Pet extends Abstract{
    public static void main(String[] args) {
        Abstract p =new Abstract() {
            @Override
            public void say() {
                System.out.println("匿名内部类实现");
            }
        };
        p.say();
    }
    @Override
    public void say() {
        
    }
}

 

 

什么是接口?

Java中的接口是一种特殊的的抽象类它里面的方法都没有实现

接口特点:

1,普遍情况下使用public修饰符修饰(其他修饰符也可以修饰,但通常跨包使用,用不到

2,使用interface关键字进行修饰,

3,接口的属性一般使用静态属性或者常量(默认是public修饰),不写不同的属性,一般写常量或者共同变量

public interface MyInterface{
    public static String name="静态属性";
    static int age=18;
}

4,接口当中方法全部都是抽象方法,没有方法体;

5,默认方法修饰符都是public ,原因:(继承后子类可以拿到父类方法)

接口的实现(接口的实现需要创建一个类来实现)

创建一个接口类(命名规范:I + 功能名称)

public interface IUserDao{
    public void login(String name,String passwd);
    void say();
}

创建一个实现类型(命名规范:去掉大写的I),实现类必须实现全部方法或者实现需要的方法,其他方法写成抽象方法

public class UserDao implements IUserDao{

    @Override
    public void login(String name, String passwd) {

    }

    @Override
    public void say() {

    }
}

接口是可以多实现的 !!!

class UserDaoImpl implements UserDao, Icon {
    //接口的多实现

    @Override
    public void login(String name, String passwd) {

    }

    @Override
    public void say() {

    }

    @Override
    public void paintIcon(Component c, Graphics g, int x, int y) {
        
    }

    @Override
    public int getIconWidth() {
        return 0;
    }

    @Override
    public int getIconHeight() {
        return 0;
    }
}

实现方法二

接口类:命名规范:功能

public interface UserDao{
    public void login(String name,String passwd);
    void say();
}
//定义接口功能

实现类:命名规范: 实现类名称+Impl 

public class UserDaoImpl implements UserDao{
//实现类名称+Impl
    @Override
    public void login(String name, String passwd) {
        
    }

    @Override
    public void say() {

    }
}

jdk8.0增加的新特性:

1,在接口中存在默认的方法,使用default关键字修饰。

default void say(){
        System.out.println("jdk8.0新特性");
}

多态调用方式

public static void main(String[] args) {
        UserDao p = new UserDaoImpl();
        p.say();
}

 2,也可以定义静态方法,此时接口就是一个工具类。

 

 

以上是关于慢慢学习,然后惊呆所有人(七,抽象类与接口)的主要内容,如果未能解决你的问题,请参考以下文章

慢慢学习,然后惊呆所有人(Arrays类)

慢慢学习,然后惊呆所有人(五,函数,附加小练习)

慢慢学习,然后惊呆所有人(六 , 面向对象,二,构造函数)

慢慢学习,然后惊呆所有人(数组)

慢慢学习,然后惊呆所有人(八,异常)

慢慢学习,然后惊呆所有人(六 面向对象)