Java快速入门(4)----学习笔记

第七章接口和内部类

Java不支持多重继承,一个类不可以继承多个类。Java引入了接口来弥补这个问题。

7.1接口

接口定义了一系列的抽象方法和常量,形成一个属性集合。接口定义完成之后,任何类都可以实现这个接口,而且一个类可以实现多个接口。实现接口的类必须实现接口中定义的抽象方法,具体实现细节由类自己定义。可以说接口实现了类的框架,可以把它理解成一种完全的抽象类------没有实现任何方法。

7.1.1接口的定义

与类的定义十分相似,只是关键字不同,类定义使用关键字class,接口使用关键字interface,比如:

    public interface Animal{
        //接口中的常量
        public static final int CHANGLIANG = 1;
        //接口中的方法---抽象方法 这里不用写abstract
        public void eat();
        public String getName();
    }

7.1.2接口的实现

接口的实现是指具体实现接口的类。接口的声明仅仅给出了抽象方法,相当于实现定义了程序的框架。实现接口的类必须要实现接口中定义的方法,除非这个类是抽象类。比如:

    public class Tiger implements Animals{
        public void eat(){
            System.out.println("老虎吃肉");
        }           
        public String getName(){
             return "老虎";
        }
  
        public static void main(String[] args){
            Tiger tiger = new Tiger();
           // Animal tiger = new Tiger();这样也可以
           //tiger是一个Animal接口类型,实例化实现了Animal接口的Tiger类。实际上实现的是指向的具体是实体类Tiger里的方法
            tiger.eat();
            System.out.println(tiger.getName());
        }
      }

接口之间也可以有继承关系。继承接口的接口拥有它的父接口的方法,它还可以定义自己的方法。比如:

    public interface Mammal extends Animal {
        void run();
    }

要实现Mammal,必须实现两个接口中的所有方法。

 public class Tiger implements Mammal{
        public void eat(){
            System.out.println("老虎吃肉");
        }           
        public String getName(){
             return "老虎";
        }
  
        public static void main(String[] args){
            Tiger tiger = new Tiger();
            //Mammal tiger = new Tiger();
            tiger.eat();
            System.out.println(tiger.getName());
        }
      }
      
      @Override
      public void run(){
        System.out.println("老虎会跑");
      }
      
-------------Tiger继承了Mammal这个接口,但是Tiger类要实现两个接口的所有方法------------

7.1.3抽象类和接口的比较

1、一个类可以实现多个接口,但只能继承一个抽象类。 2、抽象类可以有非抽象方法,接口中定义的方法必须全部为抽象方法。 3、在抽象类中定义的方法,可以是public、protected、private或默认值,但在接口中定义的方法全是public的。 4、抽象类可以有构造函数,接口不能。两者都不能实例都能通过它们来存放子类对象。

7.2内部类

内部类定义在其他类的内部,内部类所在的类被称为宿主类。

内部类种类很多,有静态内部类、非静态内部类、定义在方法内的局部内部类,还有没有名字的匿名内部类。

    public class Outer {
        String outstring =“宿主类的变量”;
        void useInner(){
            Inner inner = new Inner();
            inner.print();
          }
        /** 内部类*/
        class Inner{
            void print(){
                System.out.println("内部类输出语句");
                System.out.println(outstring);
             }
            public static void main(string[] args){
                Outer outer =new Outer();
                outer.useInner();
            }
    }
    
 ---输出结果:
 内部类输出语句
 宿主类的变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值