java中的内部类和多态

内部类

1. 定义
所谓内部类就是在一个类的内部进行其他类结构的嵌套的操作。通俗来说,可以类比人和心脏的关系。
2. 内部类的优点
a.内部类和外部类可以访问彼此的私有属性(内部类直接访问,外部类通过内部类对象间接访问)
例如:

class Outter{
  private String msg = "hello world!!";
  class Inner{
    void fun( ){
      System.out.println(msg);
      }
    }
   public void print( ){
     Inner in = new Inner( );
     in.fun( );
  }
  public class Ex{
  public static void main(String[ ] args){
    Outter out = new Outter( );
    out.print( );
  }

运行结果:

运行结果
b.使用内部类可以实现多继承的概念
例如:

class A{ }
class B{ }
class C{
   class D extends class A{ }
   class E extends class B{ }
 }

c.内部类可以对外部类完全隐藏(保护性)
3. 内外部类的关系
a.成员内部类的创建需要依赖外部类对象,先有外部类对象而后才产生成员内部类对象。
b.内部类是一个相对独立的个体,与外部类不是is-a关系。
c.内部类可以直接访问外部类的元素,外部类需要通过内部类对象间接访问内部元素。

内部类可以直接访问外部类元素
运行结果:

运行结果

外部类通过间接引用访问内部类
运行结果:
运行结果
4.内部类的分类
依据—根据内部类的位置以及关键字一共分为以下四种内部类:
a.成员内部类(普通内部类)—类比普通属性
①.定义:直接定义在外部类中,不用static关键字修饰。
②.创建语法:外部类.内部类 内部类名称=new 外部类( ).new 内部类( );
** 注**:
成员内部类的限制:成员内部类可以访问外部类的静态属性,成员内部类不能拥有静态域。
b.静态内部类—类比静态属性/方法
①.定义:直接定义在外部类中,加static关键字修饰。
②.创建语法:外部类.内部类 内部类名称=new 外部类.内部类( );
** 注**:
静态内部类的限制: 静态内部类能拥有普通域,但是不能访问外部类的普通属性。

class Outter{
  private String msg = "hello world!!";
  static class Inner{
    public void fun( ){
      System.out.println(msg);
    }
  }
  public void print( ){
    Inner in = new Inner( );
    in.fun( );
}
public class Ex{
  public static void main(String[ ] args){
    Outter.Inner in = new Outter.Inner( );
    in.fun( );
 }
}

运行结果
c.方法内部类
①.定义:方法内部类定义在外部类的方法中,方法内部类只能在该方法中被使用,出了该方法就失效。
②.使用方法内部类举例:

class Outter 
{    
    private int num;    
    public void display(int test) 
     {        
        class Inner  
        {            
        private void fun()  
        {                
           num++;                
           System.out.println(num);                
           System.out.println(test);   
            }     
          }       
         new Inner().fun();   
       } 
} 
public class Ex{    
    public static void main(String[] args) 
    {        
        Outter out = new Outter();        
        out.display(20);   
       } 
 }

运行结果:
运行结果
d.匿名内部类
①.定义:匿名内部类其实就是一个没有名字的方法内部类,所以它符合方法内部类的所有约束.除此之外,还有一些地方需要注意:
1)匿名内部类是没有访问修饰符的。
2) 匿名内部类必须继承一个抽象类或者实现一个接口
3) 匿名内部类中不能存在任何静态成员或方法
4) 匿名内部类是没有构造方法的,因为它没有类名。
5)与局部内部相同匿名内部类也可以引用方法形参。此形参也必须声明为 final
②.匿名内部类举例:

interface MyInterface {    
    void test(); 
    } 
class Outter {    
    private int num;    
    public void display(int para) 
    {        // 匿名内部类,实现了MyInterface接口       
         new MyInterface(){
             public void test() 
             {                
                 System.out.println("匿名内部类"+para);           
               }        
             }
             .test();  
         } 
     }
 
public class Ex {   
    public static void main(String[] args) {        
        Outter outter = new Outter();        
        outter.display(20);   
      } 
 }

运行结果:
运行结果

多态

1.定义:同一个类实例的相同方法在不同情形下的表现形式。
2.方法多态
a.方法重载:方法名称相同,参数个数以及类型不同,与返回值无关,无权限限制的方法。
b.方法覆写:子类写与父类方法名称、参数个数以及类型相同,具有权限的方法。子类不能有比父类强的权限。
3.对象多态
a.向上转型(90%情况下发生)
①.语法:父类 父类引用 = 子类实例( );
②.应用场景:参数统一化。
b.向下转型(1%)需要强转,发生向下转型之前,一定先发生向上转型。否则或抛出ClassCastException。
①.语法:子类 子类引用 = (子类)父类实例;
②.应用场景:发生在父类引用需要调用子类扩充的方法时,才发生向下转型变为子类引用调用其扩充方法。
**注:
无论是向上转型还是向下转型,本质在于发生了方法覆写。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值