抽象类、接口

目录

一、抽象类

二、接口


张三的信用卡和李四的信用卡抽象成一个信用卡,而这个信用卡是个类,将这个类在进行抽象,即将信用卡和储蓄银行卡在进行抽象,可以抽象成银行账户,而这个银行账户在此处相当于一个抽象类,将上面的这个例子概括一下,给抽象类下个定义的话就是类和类在进行抽象就形成了抽象类。

一、抽象类

  1. 语法格式:【修饰符列表】abstract class 类名{ }
  2. 通过上面的例子可知,抽象类是对类的在抽象,而类本身是不存在的(类只有通过new 的方法创建出来的对象才是真实存在的),所以抽象类是无法创建对象的。
package com.java;

public abstract class Student {
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Student() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    //下面讲解这个方法
    public abstract void work();

}

package com.Java;

public class TestMain {
    public static void main(String[] args) {
        Student s=new student();   //错误,因为是student类是抽象的,所以不能创建
    }
}

在上面的student中有个work方法,这个和平常写的方法是不一样的,没有方法体,类似这种类型的叫抽象方法,在抽象方法中,可以有抽象方法,也可以没有抽象方法,在上面有说过抽象类没办法实例化,也就是没办法创建Student对象,但如果我们想创建一个对象的话,怎么办呢?抽象类是不能被实例化的,要记好了抽象方法只能用来别继承,也就是创建这个类的子类,但是如果父类中有抽象方法的话,必须将父类中的抽象方法实现,也就是如下(创建Student类的子类,同时将父类中的work方法实现,如果student中没有抽象方法的话,也就不用将抽象方法实现)

package com.java;

public class GoodStudent extends Student {
    public GoodStudent(String name, int age) {
        super(name, age);
    }

    public GoodStudent() {
    }

    @Override
    public void work() {
        System.out.println("这儿就是对抽象方法Student类中的抽象方法work进行实现!");
    }

}

同时可以在TestMain中写需要的方法,如下所示

package com.java;

public class TestMain {
    public static void main(String[] args) {
        /*有了以上的实现类之后,就可以创student的对象了,以下用的是多态语法机制*/
        Student student =new GoodStudent("张三",15);
        System.out.println("我是"+student.getName()+",今年"+student.getAge()+"岁");
    }
}

二、接口

接口和抽象类是差不多的,如果说抽象类是半抽象的,那么接口就是全抽象的。(可以看下面的表格来理解),通过接下来抽象类和接口对比的方法来认识接口。

抽象类接口
方法方法可以是抽象的,也可不是方法只能是抽象的
变量可有可无不能有
常量可有可无可有可无
关键字abstractinterface
  • 语法格式:【修饰符列表】interface 接口名{...}
package com.atguigu.sparsearray;java;

public interface JiSuan {
    public static final double PI=3.14;//这个常量在这个方法中是没用的,只是展示以下如何在接口中写常量【public static final可省略】
    public abstract int jisuan(int a,int b);//前面的abstract可省略不写
}
package com.java;

public class Sum implements JiSuan {
/*
类和类之间用的是extends,但是类和接口之间用implements,同时类和类之间叫继承,类和接口叫实现
比如这个就叫sum实现了JiSuan,同时一个类可以实现多个接口,解决了单继承的不足
*/
    @Override
    public int jisuan(int a,int b) {
        int sum=a+b;
        return sum;
    }
}
package com.java;

public class TestMain {
    public static void main(String[] args) {
        Sum s=new Sum();
        int sum=s.jisuan(10,2);
        System.out.println("sum="+sum);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值