昨日内容回顾

  1. 类成员

    • 构造函数:和类同名,没有返回值,可以重载

      this(),super()
    • 成员变量:
    • 成员函数:
    • 静态代码块:类加载执行
    • {}:构造代码块
  2. interface

    • 所有方法都是抽象的

    • 属性有固定的修饰符.

    • 接口之间是继承关系,可以多重继承

    • 类和接口之间是实现关系,类可以实现多个接口

        class A implements B,C,D
    • 面向接口编程降低耦合度.

  3. 抽象类

    • abstract class
    • 抽象方法没有方法体,所在的类必须抽象类。
    • 抽象类可以没有抽象方法。
    • 不能实例化,有构造函数
  4. final

    • 修饰类,类不能被继承

    • 修饰方法,方法不能被重写

    • 修饰变量,不能被修改,常量

  5. 内部类

    • 成员位置:Benz$Engine

    • 方法内部:Benz$nEngine

  6. 继承

    extends: 单重继承,多层继承

作业解析

  1. 文字阐述静态代码块的作用。

    答:静态代码块在类加载时执行,且只执行一次,静态代码块用于初始化类。

  2. 构造代码块与构造函数的调用顺序如何?和方法的声明位置是否有关?为什么?构造代码块的作用是什么?

    答:构造代码块与构造函数是同一级别的,不管声明顺序如何,构造对象时先按序调用构造代码块,然后才调用构造函数。构造代码块的作用是给对象统一初始化数据

  3. 类加载时,是否一定会执行静态代码块?如何手动控制类加载?

    答:不一定,可以通过Class.forName(String,boolean initialize, ClassLoder)方法手动控制

  4. 定义类Person,Man,Woman形成继承关系。

     class Person{
    String name;
    int age;
    } class Man extends Person{
    } class Woman extends Person{
    }
  5. 什么是抽象方法?什么是抽象类?抽象类是否有构造函数,是否可以重载?

    答:没有方法体的方法就是抽象方法,用abstract修饰, 抽象类是不能够实例化的类,用abstract修饰,有构造函数,可以重载

  6. 抽象修饰符有哪些非法组合?并给出合理的解释?

    答:

    • private abstract: abstract修饰的方法需要子类去实现,若定义为private,则无法被子类继承,更别说实现了
    • final abstract: final修饰的方法不能被重写,也就无法实现
    • static abtract: 用abtract修饰的目的就是不想让方法被实例化对象调用,static则不需要实例化就可以调用类的方法,与abstract设计的初衷不符
  7. super和this作用以及用法以及注意事项?

    答:

    • super是指向父类的引用。访问父类构造用super(xxx),必须在构造函数第一行,访问父类属性和方法使用super.
    • this是指向对象自身的引用。访问自身属性和方法使用this.,访问自身构造使用this(xxx),且必须放置在构造函数的首行。
  8. 定义接口

    • IWhite

        interface IWhite{
      public void iWhite();
      }
    • IRich

        interface IRich{
      public void iRich();
      }
    • IBeanti

        interface IBeanti{
      public void iBeanti();
      }
    • 定义类,实现以上三个接口.(WomenStar)

        interface IWRB extends IWhite,IRich,IBeanti{
      } class WomenStar implements IWRB{
      public void iWhite(){
      System.out.println("white");
      }
      public void iRich(){
      System.out.println("rich");
      }
      public void iBeanti(){
      System.out.println("beanti");
      }
      }
    • 定义土豪类(EarchRicher.marring(...))

        class EarchRicher{
      public void marring(IWRB i){
      i.iWhite();
      i.iRich();
      i.iBeanti();
      }
      }

多态

  1. 多态就是多种状态(形态)

    对继承的类来讲,使用父类类型引用子类的对象;

    对于接口来说,可以使用接口引用实现了该接口的类所创建的对象;

  2. 好丈夫 + 好父亲 + 好儿子

    ClassCastException:类转换异常

  3. 继承和实现是多态的前提条件

  4. 类中方法可以覆盖,成员变量(资产)不能覆盖

     class Person{
    public int prop ; //财产
    } class Man extends Person{
    public int prop ; //
    } public static void main(String[] args){
    Man man = new Man();
    Person p = man ; Object obj = new Man();
    Person pp = (Man)obj ;
    }

匿名内部类对象

将类的定义,方法的实现,对象的创建一气呵成

适配器模式

  1. 如果接口中的方法较多,而使用接口的时候却只关心其中的一个或者几个方法(关心的方法较少);

  2. 如果采用常规手段,就需要对每个方法都加以实现。可以创建一个类来实现接口,对不关心的方法进行空实现,对关心的方法保持不变。定义的新类继承抽象类后,将所关心的方法加以实现即可。

此种模式就称为适配器模式。常用于UI设计中的按钮点击事件的处理

练习

  1. 定义Father类,声明asset int私有属性,同时生成get/set方法。
  2. 定义Son类继承Father,声明asset int私有属性,同时生成get/set方法。
  3. 创建Son对象,分别使用Father和Son类型的变量进行引用,依次调用

他们的setAsset()方法,然后再依次调用getAsset()方法,观察打印数据是否相同?

class Father{
//私有财产
private int asset = 10000; //getter
public int getAsset(){
return asset ;
} //setter
public void setAsset(int asset) {
this.asset = asset ;
}
} class Son extends Father{
public int asset = 100; public void setAsset(int asset){
this.asset = asset ;
} public int getAsset(){
return asset ;
} public int getFatherAsset(){
return super.getAsset();
}
} class MultiDemo3{
public static void main(String[] args){
Son s = new Son();
s.setAsset(500); //若setAsset()没有被重写,则 father.asset = 500;若setAsset()被重写,则self.asset = 500
System.out.println(s.getAsset()); //若getAsset()没有重写,则==10000;若getAsset()被重写,则==500
System.out.println(s.asset); //若setAsset()没有被重写==100;若setAsset()被重写==500;
System.out.println("--------"); Son ss = new Son();
Father ff = ss ;
ff.setAsset(800);//若setAsset()没有被重写,则father.asset = 800;若setAsset()被重写,则son.asset = 800;
System.out.println(ss.asset);// 800 ss.setAsset(900);//若setAsset()没有被重写,则father.asset = 900;若setAsset()被重写,则son.asset = 900;
System.out.println(ff.getAsset()); //若getAsset()没有重写,则==10000;若getAsset()被重写,则==900
System.out.println(ss.getFatherAsset());//10000
}
}

作业

  1. 使用接口进行如下程序设计

    个人电脑(PC)具有PCI插槽,可以插入PCI卡。显卡、声卡、语音卡都可以作为PCI卡插入PCI插槽中

    PC,PCI,slot,VideoCard,SoundCard, VoiceCard

  2. 高富帅

    Height

    Rich

    Handsome

    Girl boyFriend(HRH h)

    用匿名内部类实现

  3. 使用适配器模式实现窗口的事件处理程序

    窗口可以响应最大化事件、最小化事件、大小改变事件、恢复事件、移动事件、关闭事件

    通过适配器对大小改变事件、移动事件和关闭进行默认处理,窗口只关心最大化和最小化事件即可。

    Window

    WindowListener{max min resize restore move close}

  4. 使用抽象类和接口实现适配器模式设计。涉及的类和接口分别为ButtonListener(接口),

    其中含有click() / dbclick() / keyUp() / keyDown()等方法。

    ButtonAdapter(按钮适配器类),适配器中对非click()方法进行默认实现。

    Button类中添加addListener(ButtonListener l)方法。

  5. 阐述什么是多态。

    为什么函数可以覆盖,而属性不能覆盖?

Java基础6-多态;匿名内部类;适配器模式的更多相关文章

  1. Java基础十一--多态

    Java基础十一--多态 一.多态定义 简单说:就是一个对象对应着不同类型. 多态在代码中的体现: 父类或者接口的引用指向其子类的对象. /* 对象的多态性. class 动物 {} class 猫 ...

  2. Java基础之多态和泛型浅析

    Java基础之多态和泛型浅析 一.前言: 楼主看了许多资料后,算是对多态和泛型有了一些浅显的理解,这里做一简单总结 二.什么是多态? 多态(Polymorphism)按字面的意思就是“多种状态”.在面 ...

  3. java基础之:匿名内部类

    在java提高篇-----详解内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以 了解到匿名内部类的使用.匿名内部类要注意的事项.如何初 ...

  4. 【Java基础】多态

    首先先来个总结: 什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消 ...

  5. java基础之 多态

    在面向对象编程(Object-Oriented Programming, OOP)中,多态机制无疑是其最具特色的功能,甚至可以说,不运用多态的编程不能称之为OOP.这也是为什么有人说,使用面向对象语言 ...

  6. 黑马程序员——JAVA基础之多态与Object

    ------- android培训.java培训.期待与您交流! ----------  多态 : 多态定义:  某一类事物的多种存在形态. 多态的体现: 父类的引用指向了自己的子类对象.       ...

  7. Java基础:多态(重载和重写)

    转载请注明出处:jiq•钦's technical Blog (1)域与静态方法 记住"仅仅有普通方法的调用是多态的". 而域和静态方法不是:对于域的訪问.在编译期间就已经进行解析 ...

  8. java基础14 多态(及关键字:instanceof)

    面向对象的三大特征: 1.封装   (将一类属性封装起来,并提供set()和get()方法给其他对象设置和获取值.或者是将一个运算方法封装起来,其他对象需要此种做运算时,给此对象调用) 2.继承   ...

  9. java基础(多态)_03

    一.多态 1.概念:一个对象的多种形态 2.前提: a:必须有继承 b:必须有重写(只有重写才会有意义,没重写语法没错) 3.体现形式: 父类类型 变量名 = new 子类类型(): 4.注意事项: ...

随机推荐

  1. 【clustering】之K-means && K-medoids

    k-means k-medoids 一.clustering 中的 loss function 关于聚类的性能评价标准 参考博客 可以为外部指标和内部指标,其中外部指标是指 聚类结果与某个 “参考模型 ...

  2. OS + RedHat 6.3 x64 NFS / mount.nfs: access denied by server while mounting

    s Linux mount/unmount命令(转) https://www.cnblogs.com/xd502djj/p/3809375.html 问题2:NFS配置项no_root_squash和 ...

  3. java 中+的运算规则

    1.Java中的加法的运算优先级是从左往右的 2.字符串""隔壁跟的+号意思是字符串的连接 就不是加法了 3.'字符' 后面的+号意思是'字符'的ascall码值和后面的值相加 c ...

  4. Java NIO系列教程(七) selector原理 Epoll版的Selector

    目录: Reactor(反应堆)和Proactor(前摄器) <I/O模型之三:两种高性能 I/O 设计模式 Reactor 和 Proactor> <[转]第8章 前摄器(Proa ...

  5. Address already in use : connect 的解决办法

    最近做百万次通讯测试,在做并发测试时发现eclipse的控制台输出超过10万条信息时开始有报错内容 Address already in use : connect 这种错误多了后紧接着eclipse ...

  6. ACdream - 1060 递推数(矩阵+循环节)

    https://vjudge.net/problem/71677/origin 已知A(0) = 0 , A(1) = 1 , A(n) = 3 * A(n-1) + A(n-2) (n ≥ 2) 求 ...

  7. bzoj千题计划311:bzoj5017: [Snoi2017]炸弹(线段树优化tarjan构图)

    https://www.lydsy.com/JudgeOnline/problem.php?id=5017 暴力: 对于每一个炸弹,枚举所有的炸弹,看它爆炸能不能引爆那个炸弹 如果能,由这个炸弹向引爆 ...

  8. Storm基本原理概念及基本使用

    1. 背景介绍 1.1 离线计算是什么 离线计算:批量获取数据.批量传输数据.周期性批量计算数据.数据展示: 代表技术:Sqoop批量导入数据.HDFS批量存储数据.MapReduce批量计算数据.H ...

  9. ssm+maven+pageHelper搭建maven项目实现快速分页

    ssm+maven+pageHelper搭建maven项目实现快速分页 PageHelper分页使用: 插件的环境引入: 1.pom文件中引入分页插件的资源位置: <dependency> ...

  10. 细说log4j之概述

    log4j官网:https://logging.apache.org/ log4j目前存在2个版本:log4j 1.x 和log4j 2.x,目前官方主推2.x版本(log4j 1.x已于2015.0 ...