黑马程序员_010_抽象类与接口

-------  android培训java培训、期待与您交流! ----------
1、抽象类
    /*
    当多个类中出现相同功能,但是功能主体不同,这类可以进行向上抽取,这时,只抽取功能定义,而不抽取功能主题,用abstract。抽象方法必须放在抽象类中,因为若抽象方法放在非抽象类中,类的对象对该抽象方法完全没有意义。
抽象方法:abstract 返回值类型 方法名();   抽象方法没方法主体
特点:
        抽象方法一定存在于抽象类中
        抽象方法和抽象类都必须被abstract修饰
        抽象类不可以用new创建对象,因为调用抽象方法没意义
        抽象类中的方法要被使用,必须由子类重写所有的抽象方法后,建立子类对象来使用。 如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类(抽象方法只能存在于抽象类中)。如果子类重写了父类所有抽象方法,则子类可以不是抽象的。(一般情况下子类都是非抽象的,因此使用抽象类抽象方法,可以在一定程度上强迫子类重写一些抽象方法,因为子类需要创建对象,而抽象类不能创建对象)

抽象类和一般类:
        没有太大不同,该如何描述事物就如何描述事物,只不过该事物中出现了一些看不懂的东西,这些不确定的部分也是该事物的功能,需要明确出来,但是无法定义主题。通过抽象方法类表示。
        抽象类比一般类多了个抽象方法
        抽象类不可以实例化
        抽象类中可以存在非抽象方法。

抽象方法和一般方法:
        一般方法可以被子类直接使用,若子类需要可以对父类方法进行重写。
        抽象方法只定义返回值类型和方法名,没有方法主题,需要由子类重写使用。
*/

abstract class student
{
        abstract void study();//抽象方法必须存在于抽象类中
}
class BaseStudent extends student
{
        void study()//对抽象方法进行重写
        {
                System.out.println("study");
        }
}


2、接口
/*
    接口:初期理解,可以认为是一个特殊的抽象类,当抽象类中的方法都是抽象方法时,那么该类可以通过接口形式来表示,用interface来定义接口。
    格式特点:
            接口中常见定义:常量、抽象方法。
            接口中的成员都有固定修饰符
                    常量:public  static  final
                    方法:public  abstract
    记住:接口中的成员都是public的,但是若public  static  final      public  abstract不写的话,系统会自动补上。但是为了阅读性,一般都写上。 

    注意:
        类与类之间是继承关系,因为父类中的成员或方法,子类都可以直接使用。但是类与接口之间是实现关系,因为接口中的方法是抽象的,类必须实现接口中的抽象方法。
        接口是不可以创建对象的,因为有抽象方法。需要被子类实现,子类对接口中的抽象方法全部覆盖后,子类才可以实例化,否则子类就是一个抽象类。但可以创建接口的引用,例如接口Inter,可以Inter i;但不可以new Inter();
       
*/

interface Inter
{
         public static final int NUM = 3;//红色部分可以省略,系统会自动补上
         public abstract void show();//红色部分可以省略,系统会自动补上
}
class Test implements Inter
{
        public void show(){};
}
class InterTest
{
        public static void main(String[] args)
        {
                Test t = new Test;
                System.out.println(t.NUM);//创建子类对象,调用NUM
                System.out.println(Test.NUM);//因为NUM是static的,可直接类调用
                System.out.println(Inter.NUM);//NUM是static,接口名可直接调用
        }
}

        接口可以被类多实现,也是对多继承不支持的转换形式,java支持多实现。也就是说,一个类可以实现多个接口。
        注意:java对多继承不支持的原因是,多个父类中可能存在同名不同主体的方法,子类在继承后没办法选择该继承哪一个方法。而在接口中,多个接口中的同名方法都必须由子类去实现,接口中方法没有方法体,所以子类可以自己定义方法体,不存在该选择哪个接口方法的问题。
        类与类之间是继承,类与接口之间是实现,接口与接口之间是继承关系( 接口之间可以是多继承,一个接口可以继承多个接口(但是,多个接口之间不能存在方法名相同返回值不同的方法,因为子类对象调用时不知如何调用))。

interface Inter
{
         public static final int NUM = 3;//红色部分可以省略,系统会自动补上
         public abstract void show();//红色部分可以省略,系统会自动补上
}
interface InterA
{
          public abstract void showA();//红色部分可以省略,系统会自动补上
}
class Test implements Inter,InterA
{
        public void show()
        {
                System.out.println("对接口Inter中方法的实现");
        }
         public void showA()
        {
                System.out.println("对接口InterA中方法的实现");
        }
}
class Students
{
}
//子类可以继承父类的同时,实现多个接口
class SubStudents extends Students  implements Inter,InterA
{
}

接口特点:
    接口是对外暴露的规则
    接口是程序的功能扩展(基本功能定义在类中)
    接口可以用来多实现
    类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口
    接口与接口之间可以有继承关系
    
3、二者关系
    区别:
    接口中方法全是抽象方法(public abstract),接口中变量全是public static final的。
    抽象类中可以有非抽象方法
    共性:
    当抽象类中的方法全为抽象方法时,可以把该抽象类看做一个接口
    二者都不能被创建其实例,也就是不能被new






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值