Java Day 10

接口应用
 
多态
 猫 x = new 猫();
 动物 x = new 猫();
 
 父类或接口的引用指向其子类的对象

 1 class BookPC{
 2     public static void main(String[] args){
 3         useUSB(new UPan());
 4     }
 5     public static void useUSB(USB u){
 6         u.open();
 7         u.close();
 8     }
 9 }
10
11 class Mouse{
12
13 }
14
15 interface USB{
16     public void open();
17     public void close();
18 }
19
20 class UPan implements USB{
21     public void open(){
22         System.out.println("UPan open");
23     }
24     public void close(){
25         System.out.println("UPan close");
26     }
27 }

好处 提高代码复用性

弊端
 前期定义的内容不能使用后期子类特有的内容
 
 多态的前提:
 1、必须有关系,继承、实现
 2、要有覆盖
 
多态--转型
 动物 x = new 猫();//自动类型提升,特有的功能无法访问;向上转型
 猫 c = (猫)x;//向下转型
 
多态--类型判断 instanceof
 用于向下转型前的判断
 
多态--成员特点 编译看等号左边
 1、成员变量
  父类有就获取,无则编译失败
 2、成员函数
  子类有就覆盖,无则获取父类的
 3、静态函数
  静态不存在覆盖,也就不涉及多态;对象才有多态,静态方法属于类
 
内部类--应用于设计
 1、内部类可以直接访问外部类中的成员 包括私有的
 2、外部类访问内部类,则需要建立内部类对象
 
 编译后,查看class文件
 
内部类--修饰符
 Outer.Inner in = new Outer().new Inner();
 Static Outer.Inner in = new Outer.Inner();
 当内部类成员有static修饰,则内部类也要加static
 
细节
 Outer.this.num
 为什么内部类能直接访问外部类中的成员呢?
 因为内部类持有外部类的引用 外部类名.this
 
局部内部类--方法中
 内部类访问局部变量,局部变量需要被声明为final

匿名内部类
 内部类必须继承或实现一个外部类或接口
 其实就是一个匿名子类对象
 new 父类 or 接口 (){ 子类内容 }
 
应用
 当函数参数是接口类型时,且接口中的方法不超过3个,可以用匿名内部类作为实际参数进行传递。
 
细节
 主函数直接new Inner//为什么
 匿名内部类如果使用父类进行显示赋予引用变量,那么再用变量去调用子类方法则编译失败。
 
带继承的子类对象初始化
 1、成员变量默认初始化
 2、调用子类构造器
 3、调用父类构造器
 4、成员变量显示初始化
 5、构造代码块初始化
 6、构造函数具体初始化

时间: 2024-10-13 01:29:11

Java Day 10的相关文章

java进阶10 GUI图形界面 布局管理器之FlowLayout GridLayout

先说说FlowLayout 流式布局管理器. 效果 这是当第一行显示不下,才转到第二行的. 看看代码 package Frame; import java.awt.BorderLayout; import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame; public class MyLayout{ JFrame frame; public MyLayout(JFrame frame) { //

Eclipse调试Java的10个技巧

原文地址: http://www.oschina.net/question/82993_69439 在看这篇文章前,我推荐你看一下Eclipse 快捷键手册,我的eclipse版本是4.2 Juno. 先提三点 不要使用System.out.println作为调试工具 启用所有组件的详细的日志记录级别 使用一个日志分析器来阅读日志 1.条件断点 想象一下我们平时如何添加断点,通常的做法是双击行号的左边.在debug视图中,BreakPoint View将所有断点都列出来,但是我们可以添加一个bo

Java基础10 接口的继承与抽象类(转载)

接口继承 接口继承(inheritance)与类继承很类似,就是以被继承的interface为基础,增添新增的接口方法原型.比如,我们以Cup作为原interface: interface Cup{    void addWater(int w);    void drinkWater(int w);} 我们在继承Cup的基础上,定义一个新的有刻度的杯子的接口,MetricCup 接口如下: interface MetricCup extends Cup{    int WaterContent

关于java的10个谎言之finally

经常在面试题中会看到:exit.finally.return的提问,这也是考察个人的基础知识. 一般(注意我的措辞'一般')我们都知道exit()是退出虚拟机,那么一旦调用了exit,则不管什么 return .finally统统忽略不计,但前段时间看到了一篇博文"关于java的10个谎言"(搜了一下,好多 地方都有,也不知道谁是"首发"),这里要小记一下第一个问题(System.exit(0)会跳过finally的执 行?)的思考. 1.三者一般执行顺序 a.re

几周内搞定Java的10个方法

不要将Java与JavaScript弄混了,Java的目标是“一次编译,到处调试”(呃,不对,是“到处运行”).简单来说,就是Java程序可以直接在任何设备上运行. Java语言是什么? 不管我们是否意识到,实际上我们基本每天都在与Java打交道.在浏览网页时,可能会弹出一个提示,要求必须安装Java才能继续浏览.这种情况一般发生在使用flash或者是通过某种方式将flash组件集成到核心系统的站点. Java并不是那种通常在新电脑上直接下载下来就能用的程序.我不能确定有没有操作系统将Java作

【Java二十周年】我比Java大10岁

1991年,我7岁,刚刚步入学堂不到半年.而计算机在那个年代也是一个新奇的事物.可就在那样的环境中,Java已经有了萌芽.那一年,SUN公司启动绿色计划,打算发展一种可以在任何消费电子产品上运行的软件.但由于C++自身有很多不足,所以项目组决定自行开发一种新的语言Oak.最初,Oak应用于机顶盒,但是在当时市场不成熟的情况下,项目失败了.但Oak却得到了SUN领导的赏识,于是: 1995年3月23日,在对Oak进行小规模改造后Java语言诞生了,并广泛应用于互联网领域. 一年后,在1996年,我

Java基础10:全面解读Java异常

Java基础10:全面解读Java异常 为什么要使用异常 首先我们可以明确一点就是异常的处理机制可以确保我们程序的健壮性,提高系统可用率.虽然我们不是特别喜欢看到它,但是我们不能不承认它的地位,作用. 在没有异常机制的时候我们是这样处理的:通过函数的返回值来判断是否发生了异常(这个返回值通常是已经约定好了的),调用该函数的程序负责检查并且分析返回值.虽然可以解决异常问题,但是这样做存在几个缺陷: 1. 容易混淆.如果约定返回值为-11111时表示出现异常,那么当程序最后的计算结果真的为-1111

java 24 - 10 GUI 之 四则预算的数据校验

我想要在校验的过程中,如果输入到操作数中的不是数字,则弹出提醒框: 类 JOptionPane  有助于方便地弹出要求用户提供值或向其发出通知的标准对话框 方法名 描述 showConfirmDialog 询问一个确认问题,如 yes/no/cancel. showInputDialog 提示要求某些输入. showMessageDialog 告知用户某事已发生. showOptionDialog 上述三项的大统一 (Grand Unification). 在设置窗体类添加代码: 1 priva

java 19 - 10 自定义异常的实现和测试

1 /* 2 * java不可能对所有的异常情况都考虑到,所以,在实际的开发中,我们可能需要自己定义异常. 3 * 而我们自己随意的写一个类,是不能作为异常类来看的,要想你的类是一个异常类,就必须继承自Exception或者RuntimeException 4 * 5 * 两种方式: 6 * A:继承Exception 编译期异常 7 * B:继承RuntimeException 运行期异常 8 */ 9 public class MyException extends Exception {

java中10大常见异常

NO.1 java.lang.NullPointerException 这个异常大家肯定都经常遇到,异常的解释是 "程序遇上了空指针 ",简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等.对数组操作中出现空指针,很多情况下是一些刚开始学习编程的朋友常犯的错误,即把数组的初始化和数组元素的初始化混淆起来了.数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,依然