Java面向对象(5) —— 内部类、面向对象

一、内部类

1、成员内部类:不常用
  (a)类中套类,外面的叫外部类,里面的叫内部类
  (b)内部类通常只服务于外部类,对外不具备可见性
  (c)内部类对象通常是在外部类中创建的
  (d)内部类中可以直接访问外部类的成员(包括私有的)
    内部类中有个隐式的引用指向创建它的外部类对象,语法:外部类名.this

class Outer{
    private int time;

    class Inner{
        public void timeInc(){
            time++;
        }
    }
}
class Outer{
    private int time;
    private Inner inner;

    Outer(int time){
        this.time =time;
        inner = new Inner();
        inner.timeInc();
    }

    public void printTime(){
        System.out.println(time);
    }

    class Inner{
        public void timeInc(){
            time++;
        }
    }
}

Outer outer = new Outer(100);
outer.printTime();
//输出结果为101

2、匿名内部类:比较常用
  如果在一段程序中需要创建一个类的对象(通常这个类需要实现某个接口或者继承某个类),而且对象创建后,这个类的价值也就不存在了,这个类可以不必命名,称之为匿名内部类。
  SuperType obj = new SuperType(…){
    //匿名内部类中定义的成员变量和方法
  };

  匿名内部类中访问外部的数据,该数据必须是final的。

public interface Action{
    public void execute();
}

public class Main{
    public static void main(String[] args){
        //1、创建了Action的一个子类,没有名字
        //2、为该子类创建了一个对象,引用叫action
        //3、大括号中的为子类的类体
        Action action = new Action(){
            public void execute(){
                System.out.println("Hello,World");
            }
        };
        action.execute();//代码中创建了实现了Action接口的内部匿名类对象,并调用其execute方法。
    }
}

  内部类编译后会生成自己独立的.class文件。


二、多态

1、意义
  (a)同一类型的引用指向不同的对象时,有不同的实现(子类继承实现了父类的抽象方法)
     行为的多态
  (b)同一对象被造型为不同的类型时,有不同的功能(子类实现了多接口,向上造型为不同的接口类型时)
     对象的多态
2、向上造型
  (a)父类型的引用指向子类的对象
  (b)能造型成的类型有:
      父类型、实现的接口
  (c)能点出来什么,看引用的类型
3、强制类型转换,成功的条件有两个:
  (a)引用所指向的对象,就是该类型
  (b)引用所指向的对象,实现了该接口
  如果在强制转换过程中不符合上述两个条件之一,将会抛出ClassCastException异常。
4、通过instanceof来判断引用是否是某种类型
  instanceof返回boolean结果
  强转成功的条件就是它为true的条件


三、面向对象三大特征

1、封装:
  (1)类:封装的是对象的属性和行为
  (2)方法:封装的是具体的逻辑功能实现
  (3)访问控制修饰符:封装的是访问的权限
2、继承:
  (1)作用:避免代码重复,有利于代码的重用
  (2)父类:所有子类所共有的属性和行为
   子类:子类所特有的属性和行为
  (3)子继承(extends)父后,子具有:父+子
  (4)传递性、单一继承、多接口实现
3、多态:
  (1)行为的多态、对象的多态
  (2)向上造型、强制类型转换、instanceof
  (3)多态的表现形式:重写+重载

package oop.day06;

public class CastTest {
    public static void main(String[] args) {
        //向上造型
        Aoo a1 = new Boo();   //向上造型
        Inter1 a2 = new Boo(); //向上造型
        //Inter1 a3 = new Coo(); //错误,类型不匹配

        //向上造型时,点出来什么,看类型
        Aoo b1 = new Boo();  //向上造型
        b1.b();  //正确
        //b1.num1=5; //编译错误,点出来什么看类型

        //强转时看对象
        Aoo c1 = new Boo(); //向上造型
        Boo c2 = (Boo)c1;   //c1指向的对象是Boo
        Inter1 c3 = (Inter1)c1;
                    //c1指向的对象实现了Inter1接口
        //Coo c4 = (Coo)c1; //类型转换异常
                   //c1指向的对象与Coo无关
        //instanceof为true两种情况:
        //1.对象为该类型
        //2.对象实现了该接口
        if(c1 instanceof Coo){  //false
            Coo c4 = (Coo)c1;
        }
    }
}

interface Inter1{
    void a();
}

abstract class Aoo{
    abstract void b();
}

class Boo extends Aoo implements Inter1{
    int num1;
    void b(){}
    public void a(){}
}

class Coo extends Aoo{
    int num2;
    void c(){}
    void b(){}
}

四、面向对象设计原则

1、将公共的属性和行为封装到父类中。
2、所有子类的行为都一样 — 普通方法
  所有子类的行为不一样 — 抽象方法
3、若符合即是也是原则时,使用接口(继承只能继承一个父类,但接口可以实现多个)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值