内部类,关键字

super关键字

  • super表示调用父类的方法
    1.调用父类构造方法 : super(参数列表)
    子类中调用父类无参构造时,super()可写可不写;子类调用父类有参构造时,super(参数列表)必须写,告知编译器调用的是哪个父类有参构造。
    super与this在构造方法中不能同时存在,即子类不存在构造方法的互相调用。
    2.super调用父类普通方法
    super.方法名(参数列表)
  • super表示调用父类属性
  • this与super的区别

在这里插入图片描述

final关键字–终结器

  • final修饰类 ,表示该类不允许被继承,同时该类中的所有方法都会被加上final关键字(不包含成员变量)。
    String类以及八大数据类型包装类都是final类
  • final修饰方法,表示该方法不允许被覆写
  • final方法常用于模板方法—保护性
  • final修饰属性,表示该属性值不可变,并且该属性必须在声明时初始化
    1.基本数据类型变量
    类中常量一般使用final+static,描述全局常量
 public final int a=5;//对象加载才有
    public static final int b=10;//全局数据区,只有一个
    

2.引用数据类型变量

  • byte,int,short,char都会转换成int,final修饰的域类型不会改变
public class Test3{
    byte b1=2,b2=3,b3,b6,b8;
    final byte b4=4,b5=5,b7=10;
    //byte,int,short,char都会转换成int,final修饰的域类型不会改变
    public void Test3(){
       b3=b1+b2;//编译错误,右边是int
        b6=b4+b7;//对,
        b4=b2+b5;//错
        b6=b4+b1;//错
    }

多态

同一个类实例的相同方法在不同情形下有不同的表现形式

  • 向上转型—用于参数统一化
    父类 父类引用=new 子类();
    Person per=new Student();

  • 要发生向下转型(需要强制类型转换,用于父类引用需要调用子类扩充方法时),必须先发生向上转型(爹认儿子)

Person per=new Student();
//向下转型
Student stu=(Student)per;
  • 引用instanceof类:表示该引用能否指向该类实例,返回boolean型
    per instanceof Student

内部类

  • 优点:
    1.内部类与外部类可以互相访问彼此的私有域
    2.内部类可以实现Java的单继承局限
    3.内部类可以对同一包中的其他类隐藏起来,仅供外部类使用(保护性)
  • 缺点 结构复杂

内部类与外部类的关系

  • 对于非静态内部类而言,内部类的创建需要依赖外部类的实例化对象,在没有外部类对象之前是无法创建内部类的。
  • 内部类是一个相对独立的个体,与外部类不是is-a的关系
  • 内部类可以直接访问外部类的元素,包括私有域,外部类不可以直接访问内部类元素,需要通过内部类的引用间接访问。
class Outter{
    private String msg="teat";
    class Inner{
        public void fun(){
            System.out.println(msg);
        }
    }
    public void test(){
        Inner in=new Inner();
        in.fun();
    }
}

创建非静态内部类

外部类.内部类 内部类引用=new 外部类().new 内部类();

Outter .Inner in=new Outter().new Inner();
in.fun();

创建静态内部类

外部类.内部类 内部类引用=new 外部类.内部类();

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

内部类的分类

  • 成员内部类-成员方法
    1.成员内部类不能存在任何static变量或方法,可以访问外部类的静态域。
    2.成员内部类需要依附外部类new Outter().new Inner();
    3.内部类可以使用private封装,表示私有内部类,该内部类仅供外部类使用。
  • 静态内部类-静态方法
    1.静态内部类的创建不需要外部类,可以直接创建。
    2.静态内部类不可以访问外部类的任何非static域
  • 方法内部类-成员内部类
    1.定义在外部类的方法中,不能使用任何访问权限修饰符。
    2.方法内部类对外(方法外)完全隐藏,除了该方法可以访问它之外,其余地方均不能访问。
    3.方法内部类要想使用方法形参,该形参必须使用final声明(JDK8变为隐式final声明)。
  • 匿名内部类-方法内部类的特殊版本
    1.匿名内部类必须继承一个抽象类或者实现一个接口
    2.匿名内部类没有构造方法,因为它没有类名
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值