3/4day03_多态_内部类_权限修饰_代码块

2020-03-04  本文已影响0人  蹦蹦跶跶的起床啊

回顾

1.接口中可以写成员变量吗?
不能! 接口只能写常量,由三个修饰符public static final修饰的

2.接口中都可以写哪种方法?
抽象方法[最常见的]
默认方法
静态方法

3.我们学过的普通类,抽象类,接口中哪些有构造方法?哪些没有构造方法?
普通类有构造方法: a.new对象时使用 b.子类的构造方法第一行调用
抽象类有构造方法: b.子类的构造方法第一行调用
接口没有构造方法(因为接口中没有成员变量,也不需要对成员变量初始化)

4.描述一下Java中类和类的关系,类和接口的关系,接口和接口的关系
类和类:单继承
类和接口: 多实现(类实现接口)
接口和接口: 多继承[了解]

5.接口和抽象类的异同有哪些?[面试题]
a.概念:什么是接口,什么是抽象类
b.相同
都是java文件,编写以后都是.class文件
都是引用数据类型
都不能创建对象
都可以含有抽象方法
子类/实现类继承之后都必须重写所有抽象方法,之后才能创建对象
c.不同
关键字不同
接口中没有成员变量,抽象类中可以有成员变量
接口可以多实现,抽象类只能单继承
抽象类有构造,接口无构造
抽象类中有普通方法,接口中不能有普通方法

今日内容

多态

概述

多态的前提[重要]

1.必须有继承关系或者实现关系
2.必须有方法的重写

  1. 父类变量引用子类对象
    只有1,2同时满足才能有多态

多态的体现[重要]

父类类型的变量 指向了 子类类型的对象
父类类型 变量名 = new 子类对象;

Fu ff = new Zi();

多态调用方法的特点[重点]

1.多态调用方法时,编译阶段是看父类 . 如果父类没有该方法就会出错
2.多态调用方法时, 运行阶段看子类. 运行的是子类的方法
总结, 编译看父类, 运行看子类

多态的好处[重点]

多态提高了代码的扩展性,灵活性

多态的弊端

弊端: 使用多态时, 只能调用子父类都有的方法. 不能调用子类特有的方法

多态弊端解决方案

基本类型转换:1.自动类型转换,2.强制类型转换

引用类型转换:
1.向上转型(把子类类型转成父类类型)
Animal an = new Dog();//多态就是向上转型
2.向下转型 (把父类类型转成子类类型)
必须有向上转型,才能有向下转型
Dog d = (Dog)an;

向下转型最多只能转型到本身

转型可能出现的异常

ClassCastException 类型转换异常

向下转型 转到其他子类编译阶段同样通过, 但是运行会出错

instanceof关键字

内部类

在类A里 定义一个 类B.
类B成为内部类, 类A称为外部类
内部类:(一个java文件里只能有一个public修饰的类)
1.成员内部类(类中方法外)
2.局部内部类(类中方法内)

在内部类方法中找外部类的成员变量 使用
外部类名.this.变量名

成员内部类

特点:
1.在成员内部类中,可以无条件访问外部类的任何成员
2.在测试类中创建内部类对象
,必须先创建外部类对象, 通过外部类对象再去创建内部类对象
格式:
外部类名.内部类名 对象名 = new 外部类型().new 内部类型();
如:
Person.Heart h = new Person().new Heart();
或者
Person p = new Person();
Person.Heart h = p.new Heart();

内部类文件编译的字节码文件

内部类仍然是一个独立的类,在编译之后会内部类会被编译成独立的.class文件

格式:
外部类的类名和$符号 。

比如:
Person$Heart.class

匿名内部类[重点]


如图接口的匿名内部类使用:


匿名内部类格式总结:

 父类名/接口名 对象名 = new 父类名/接口名 () {
                    //重写父类或者接口中所有抽象方法
}

权限修饰符

介绍

成员变量使用 private ,隐藏细节。
构造方法使用 public ,方便创建对象。(单例设计模式构造方法用的private)
成员方法使用 public ,方便调用方法。

代码块

定义

由一对大括号括起来的一句或者多句代码, 称为代码块儿

构造代码块

public class 类名{
    {
        //构造代码块
    }
}

静态代码块

public class 类名{
  static{
          //静态代码块
      }
}
上一篇 下一篇

猜你喜欢

热点阅读