java详解 --- 抽象与接口

一.抽象

1.什么是抽象
想必大家都听说过抽象画这个词,我不知道大家能不能看懂抽象画,反正我是看不到,没到那个境界.
那么什么是抽象呢?简单的来说,抽象就是看不懂的一些事物,无法用具体的一些具体的语言描述的事物.
2.抽象类与抽象方法
a.定义:在面向对象的概念中,所有的对象都是通过类来描绘的.但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类.
b.抽象使用的关键字 – abstract
用abstract修饰的类叫做抽象类;用abstract修饰的方法叫做抽象方法.
注意:
①.抽象方法是没有实现部分的.
②.抽象类中的抽象方法是为了强制子类去重写父类的抽象方法.
③.抽象类不能实例化(创建)对象
④.抽象类的创建对象的方式和多态创建的方式差不多
⑤.抽象类中不一定有抽象方法,但是抽象方法一定存在在抽象类中
⑥.抽象类的子类必须重写父类中存在的所有抽象方法
⑦.抽象类中:
成员变量:可以存在变量也可以存在常量
成员方法:可以有抽象方法也可以有成员方法
构造方法:存在成员方法
下面举例一段代码:

public class Demo01 {
    public static void main(String[] args) {
        Animal animal = new Cat();
        animal.eat();
        animal.fun();
    }
}
//抽象类
abstract class Animal{
    public abstract void eat();
    public Animal(){
        System.out.println("构造方法");
    }
    public void fun(){
        System.out.println("成员方法");
    }
}

class Cat extends Animal{
    public Cat(){
        super();//调用了父类的构造方法
    }
    @Override
    public void eat() {
        System.out.println("猫吃鱼");//重写父类的方法     
    }
}
class Dog extends Animal{
    public Dog(){
        super();//调用了父类的构造方法
    }
    @Override
    public void eat() {
        System.out.println("狗吃骨头");//重写父类的方法        
    }
}

抽象的一些问题:
1.一个类没有抽象方法,可不可以定义为抽象类?如果可以那么作用是什么呢?
答:可以.抽象方法里可以存在抽象方法,也可以不存在,但是抽象方法一定存在于抽象方法.作用:禁止抽象类创建出对象,只可以使用子类
2.abstract不能与那些关键字一起使用?
答:①.final关键字.
final修饰的方法不能被重写,而abstract修饰的方法就是让子类重写这个方法,有冲突,所以不能一起使用.
②.private关键字
private关键字修饰的方法只能在本类中被访问,子类没有办法访问到,导致子类没有办法重写被修饰的方法,有冲突,所以不能一起使用.
③.static关键字
static关键字修饰的方法只能用类名调用,abstract修饰的方法实现不了,而没有被实现的部分的方法只能用方法的声明,不能用类调用,有冲突,所以不能一起使用

二.接口

1.接口的定义
接口,在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方法.
2.接口的书写规则
interface 接口名{

}
3.接口的特点
①.接口中只能声明抽象方法
②.如果你不写public abstract关键词修饰接口中的声明方法,那么系统会自动帮你添上,所以一般我们都把前面的关键词添上
③.接口也不能实例化对象(谁要用接口 谁就实现接口中的方法),也可以使用多态的方式创建实现类对象
④.接口的实现:实现implements(实现)关键字
4.接口要注意的几个点
接口中:
成员方法:只能存在常量,不能存在变量.
常量:public static final 常量名 = 初值;
所以当你在接口中声明变量,系统默认会是public static final修饰,所以书写的时候最好写上.
成员方法:只能有抽象方法,没有成员方法
构造方法:不能有构造方法
5.关系
①类与类之间的关系是继承的关系,可以是单继承,也可以是多继承
②.类与接口的关系是实现(implements)的关系,可以使单实现,也可以是多实现
③.接口与接口的关系也是继承的关系,可以是单继承,也可以是多继承
代码举例说明:

public class Demo02 {
    public static void main(String[] args) {
        InterA A = new Person();
        A.print();
    }
}
//定义接口
interface InterA{
    public abstract void print();
}
class Person implements InterA{
    public void print(){
        system.out.println("我是父类print的重写");
    }
}

接口的多继承:

interface InterX{
    public abstract void fun();
}

interface InterY{
    public abstract void fun1();
}

interface InterZ extends InterX,InterY{

}

类与接口的多实现:

interface InterX{
    public abstract void fun();
}

interface InterY{
    public abstract void fun1();
}

class Car implements InterX , InterY{
    @Override
    public void fun() {
        System.out.println("我是fun");
    }
    @Override
    public void fun1() {
        System.out.println("我是fun1");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值