黑马程序员————面向对象多态,内部类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了黑马程序员————面向对象多态,内部类相关的知识,希望对你有一定的参考价值。

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!-----

一、多态

多态概述

一句话,父类引用指向子类对象。Person p = new Student();事物存在的多种形态

类与类之间要么实现,要么继承

 

多态的特点

提高了程序的可扩展性和后期可以维护性。

父类型的引用在使用功能时,不能直接调用子类中的特有方法。

类型提升  Student s = (Student)p

多态 Person p = new Student();

如果子类父类中含有同名变量和同名函数:

函数:编译看左边,运行看右边。

同名变量:都看左边

多态的应用举例

 

package com.fanfantest;



/*多态示例延时
 * 
 * 
 */
public class Test1 {
    
    
    public static void main(String[] args) {
    
        PetShop ps = new PetShop();
        ps.askFood(new Cat());
        ps.askFood(new Dog());
    }
}


interface Eat {      //接口Eat,封装了eat方法,用来表示不同动物喜欢吃的事物
    
    public  abstract void eat () ;
        
    
}

class Cat implements Eat {   //猫类实现了接口,重写了方法
    
    public void eat() {
        
        System.out.println("the fish is great");
    }
}

class Dog implements Eat {
    
    public void eat() {
        System.out.println("the bones is good");
    }
}

class PetShop {     //宠物商店,内涵方法询问食物
    
    public void askFood(Eat a) {
        
        a.eat();
    }
    
}

 

 

 

二、内部类

内部类概述

内部类就是将一个类作为成员定义在了另一个类中。如集合类中,都有一个类实现了Iterator接口,用于操作该集合内部的元素。集合对象.iterator();返回这样的一个内部类。

内部类特点

访问规则:

1、内部类可以直接访问外部类中的成员,包括私有。

之所以可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,格式:  外部类名.this。

2、外部类要访问内部类,必须建立内部类对象。

Outer.Inner in =new Outer().new Inner();

局部内部类和成员内部类

局部内部类定义在外部类的某个方法中,内部类不可以访问它所在的局部中非最终变量。只能访问被final修饰的局部变量。

内部类程序举例

匿名内部类

匿名内部类可以理解为一个内部类的对象,且这个对象必须继承一个类或实现一个接口。

多线程中有所体现

  new Thread(new atrun() {

    public void run() {

      .........

     }

  }).start();

 练习,补全代码

interface Inter  { 
    
    void method();  
}  
  
class Test  { 
 
    //补足代码,通过匿名内部类  
    static Inter function()   { 
       
        return new Inter()      {  
    
            public void method()           { 
    
                System.out.println("内部类练习");  
            }  
        };  
    }  
}  
  
class InnerClassDemo   {  

    public static void main(String[] args)   {
    
        Test.function().method();  
    }  
}  

 

 

以上是关于黑马程序员————面向对象多态,内部类的主要内容,如果未能解决你的问题,请参考以下文章

浅谈面向对象之封装继承多态!如何使用内部类模拟多继承

java基础(12)面向对象--多态内部类

java面向对象的三大特征?

面向对象3大特性:封装继承多态——封装(this 访问修饰符内部类)

面向对象 封装继承多态

06 面向对象:多态&抽象类&接口&权限修饰符&内部类