黑马程序员-JAVA SE入门(接口、多态、内部类)

---------------------- <a target="blank">ASP.Net+Android+IO开发S</a>、<a target="blank">.Net培训</a>、期待与您交流! ----------------------


接口

格式:interface  接口名 { }
接口中的成员修饰符是固定的。
成员常量:public static final
接口里面定义变量是全局常量,而且上面三个关键字都可以省略。
成员函数:public abstract
接口里面定义的方法都是抽象的,而且上面的两个关键字也是可以省略的。
发现接口中的成员都是public的。
接口的出现将“多继承”通过另一种形式体现出来,即“多实现”。

    接口的特点:
   
   
接口是对外 暴露的规则
接口是程序的 功能扩展
接口的出现 降低耦合性
接口可以用来 多实现
类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口。
接口与接口之间可以有继承关系。
如:
		public   interface   I  {   
          		method1(){};   
 		 }   
  		class   A   implements   I  {   
          		method1()  {   
                    		somefunction......   
          		}   
  		} 

接口于抽象类的区别:
共  性:都是不断抽取出来的抽象的概念
区别 1:
抽象类体现继承关系,一个类只能单继承
接口体现实现关系,一个类可以多实现
区别 2:
抽象类是继承,是 "is a "关系
接口是实现,是 "like a"关系
区别 3:
抽象类中可以定义非抽象方法,供子类直接使用
接口的方法都是抽象,接口中的成员都有固定修饰符

多态:

程序中的提现:父类或者接口的引用指向或者接收自己的子类对象。
好处和作用:多态的存在提高了程序的扩展性和后期可维护性
多态三个必要条件:
父类引用指向子类对象
要有覆盖操作,也就是重写
需要存在继承或者实现关系
    	1、多态的体现:
		父类的引用指向了自己的子类对象。
		父类的引用也可以接收自己的子类对象。
    	2、多态的前提:
		必须是类与类之间有关系。要么继承,要么实现。
		通常还有一个前提:存在覆盖。
   	3、多态的好处:
		多态的出现大大的提高程序的扩展性。
    	4、多态的弊端:
		提高了扩展性,但是只能使用父类的引用访问父类中的成员。

    	在多态中成员函数的特点:
		在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败。
    		在运行时期:参阅对象所属的类中是否有调用的方法。
   	简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。

    	在多态中,成员变量的特点:无论编译和运行,都参考左边(引用型变量所属的类)。
    	在多态中,静态成员函数的特点:无论编译和运行,都参考做左边。
	

内部类:

将一个类定义在另一个类的里面,对里面那个类就称为内部类(内置类,嵌套类)。
访问特点:
内部类可以直接访问外部类中的成员,包括私有成员。是因为内部类中持有了一个外部类的引用,格式 外部类名.this。而外部类要 访问内部类中的成员必须要建立内部类的对象。
    访问格式:
	1、当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中。可以直接建立内部类对象。
	格式:
	    外部类名.内部类名  变量名 = 外部类对象.内部类对象;
	    Outer.Inner in = new Outer().new Inner();
	2、当内部类在成员位置上,就可以被成员修饰符所修饰。
	    如:private:将内部类在外部类中进行封装。
		static:内部类就具备static的特性。
	    当内部类被static修饰后,只能直接访问外部类中的static成员。出现了访问局限。

	在外部其他类中,如何直接访问static内部类的非静态成员呢?
	    new Outer.Inner().function();

	在外部其他类中,如何直接访问static内部类的静态成员呢?
	    uter.Inner.function();

	注意: 当内部类中定义了静态成员,该内部类必须是static的。
	       当外部类中的静态方法访问内部类时,内部类也必须是static的。
	
        当描述事物时,事物的内部还有事物,该事物用内部类来描述。因为内部事务在使用外部事物的内容。
	如果一个类继承内部类,则创建该类的对象时需提供一个外部类的对象作为构造方法的参数。如:
	    class Car{
     class Wheel{ }
}

class SuperWheel extends Car.Wheel{
     SuperWheel(Car car){
         car.super();
     }

     public static void main(String [] args){
         Car car = new Car();
         SuperWheel wl = new SuperWheel(car);
    
}

匿名内部类:

1、匿名内部类其实就是内部类的简写格式。 2、定义匿名内部类的前提:内部类必须是继承一个类或者实现接口。 3、匿名内部类的格式: new 父类或者接口(){定义子类的内容} 4、其实匿名内部类就是一个匿名子类对象。而且这个对象有点胖。可以理解为带内容的对象。 5、匿名内部类中定义的方法最好不要超过3个。
如:
	class Constant{          
    int n;                        
    Constant(int i){             
     n=i;                      
    }
   }

public class Thing{                    
        Constant getConstant(){       
            return new Constant(5){    
         int n=5;                      
           };
        }
             public static void main(String[] args){           
               Thing th=new Thing();                            
               System.out.println(th.getConstant().n);;        
}
   }

---------------------- <a target="blank">ASP.Net+Android+IOS开发</a>、<a target="blank">.Net培训</a>、期待与您交流! ----------------------

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值