[关闭]
@zhangyy 2021-06-07T16:37:42.000000Z 字数 23571 阅读 169

java 的面向对象

Java基础系列



1. 面向对象简介:

  1. OOP:
  2. Oriented object program:面向对象编程
  3. OOA:
  4. Oriented object analyze:面向对象分析
  5. OOD:
  6. Oriented object design:面向对象设计
  7. Java 一切面向对象

1.1 理解面向对象

  1. 1. 面向对象是相对面向过程而言
  2. 2. 面向对象和面向过程都是一种思想
  3. 3. 面向过程
  4. 3.1 强调的是功能与行为
  5. 4. 面向对象
  6. 将功能封装进行对象,强调具备了功能的对象
  7. 5. 面向对象是基于面向过程的。

1.2 面向对象的特点:

  1. 1. 是一种符号人民思考习惯的思想
  2. 2. 可以将复杂的事情简单化
  3. 3. 将程序员从执行者转换为指挥者
  4. 4. 完成需求时:
  5. 4.1 先要去找具体所需的功能的对象来用。
  6. 4.2 如果该对象不存在,那么创建一个具有所需功能的对象
  7. 4.3 这样简化开发并提高复用

1.3 面向对象开发,设计,特征

  1. 1. 开发的过程:其实就是不断的创建对象,使用对象,指挥对象做事情。
  2. 2. 设计的过程: 其实就是在管理和维护对象之间的关系。
  3. 3. 面向对象的特征:
  4. 3.1 封装(encapsulation
  5. 3.2 继承(inheritance
  6. 3.3 多态(polymorphism
  7. 对象就是切实存在的个体
  8. 4. 类的概念:
  9. 物以类聚,人以群分
  10. 对现实事物的软件抽象

1.4 类与对象的关系

  1. 1. 使用计算机语言就是不断的在描述现实生活中的事物
  2. 2.Java中描述事物通过类的形式体现。
  3. 类似具体事物的抽象,概念上的定义
  4. 3.对象就是该类事物实实在在存在的个体

image_1bou7m5qu28u81g1tp111bl1o5gp.png-464kB

1.5 类的定义:

  1. 1. 生活中描述事物无非就是描述事物的属性和行为:
  2. 如:人有身高,体重等属性,有说话,打球等行为
  3. 2. Java 中类class 来描述事物也是如此
  4. 属性:对应类中的成员变量
  5. 行为:对应类中的成员函数
  6. 3. 定义类其实在定义类中的成员(成员变量和成员函数)
  7. 类的成员:
  8. 1. 成员变量
  9. 属性
  10. 数值类型的基本数据类型,默认值是0
  11. 2. 成员函数
  12. 方法
  13. 3. 定义方式
  14. class // 类名
  15. // 首字母大写。$_开头
  16. 堆:数组和对象在堆中
  17. 栈: 方法在栈中

1.6 成员变量与局部变量的区别

  1. 成员变量:
  2. 1. 成员变量定义在类中,在整个类中都可以访问
  3. 2. 成员变量随着对象的建立而建立,存在于对象所在的堆内存当中。
  4. 3. 成员变量有默认初始化值。
  5. 局部变量:
  6. 1. 局部变量只定义在局部范围内,如:函数内,语句内等
  7. 2. 局部变量存在于栈内存中
  8. 3. 作用的范围结束,变量空间会自动释放
  9. 4. 局部变量没有初始化值
  1. package com.learnjava.day04;
  2. public class ClassDemo01 {
  3. public static void main(String[] args) {
  4. //创建对象
  5. //局部变量
  6. Persion p = new Persion();
  7. p.age = 14;
  8. p.hight = 165;
  9. p.weight = 160;
  10. System.out.println(p.age);
  11. p.run();
  12. }
  13. }
  14. class Persion {
  15. //成员变量
  16. int hight;
  17. int weight;
  18. int age;
  19. //成员方法
  20. public void run() {
  21. System.out.println("run.........");
  22. }
  23. }

image_1bou92a4k1t4ik8b603ecm1i8e16.png-38.6kB

1.7 Java 的堆栈

  1. 栈是存放方法的,先进后出
  2. 所有方法的都在栈中

image_1bouac4td4461fmaeqnvev8151j.png-359.4kB


1.8 java 堆栈的的溢出问题

  1. package com.learnjava.day04;
  2. public class StackHeapDemo {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. byte [] arr = new byte[4 * 1024 * 1024 * 1024];
  6. System.out.println("ok");
  7. }
  8. }

image_1bp064qvc15nv19dijjk16rd1smo9.png-32.8kB

  1. package com.learnjava.day04;
  2. public class StackHeapDemo {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. //输出负数了,二进制的最高位移位。
  6. byte [] arr = new byte[78 * 1024 * 1024 * 1024];
  7. System.out.println("ok");
  8. }
  9. }

image_1bp067rj21muiasq556jqj1jan16.png-63kB

  1. package com.learnjava.day04;
  2. public class StackHeapDemo {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. // 堆溢出
  6. byte [] arr = new byte[Integer.MAX_VALUE];
  7. System.out.println("ok");
  8. }
  9. }

image_1bp06bef7hp1gtf1rud152olhm20.png-62.1kB

  1. Java VM 调整堆大小
  2. java -X 查看Java 费标准输出帮助
  3. -- java -xmx 80M StackHeapDemo
  4. -- Java -Xms100M // 设置jvm 的堆空间的初始大小
  5. -- Java - Xmx100 // 设置对空间的最大值
  6. java 默认的堆大小是物理内存的1/4
  7. 一般会设置两个一样大,这样就避免以后再分配内存

image_1bp06rf9317u1a7gvnc11if1eaa2d.png-338.1kB


  1. package com.learnjava.day04;
  2. public class StackHeapDemo01 {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. while(true) {
  6. out();
  7. }
  8. }
  9. public static void out() {
  10. System.out.println("kkkkk");
  11. }
  12. }

image_1bp07cshu1bu66il1fn11m2p1hpe4a.png-30.1kB

  1. package com.learnjava.day04;
  2. public class StackHeapDemo01 {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. int i = 0;
  6. while(true) {
  7. out(i++);
  8. }
  9. }
  10. public static void out(int i) {
  11. System.out.println(i);
  12. }
  13. }

image_1bp07hiv4la7gmu11mp180g14j64n.png-57.3kB
image_1bp07n36c17aq17skd721c831rul54.png-200.4kB

  1. package com.learnjava.day04;
  2. public class StackHeapDemo01 {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. // int i = 0;
  6. // while(true) {
  7. // out(i++);
  8. // }
  9. out(1);
  10. }
  11. public static void out(int i) {
  12. System.out.println(i);
  13. out(i+1);
  14. }
  15. }

image_1bp085kuv4h81l0915mrd6tjjn5u.png-24.5kB

  1. 要想栈溢出必须只压栈,不弹栈,方法的死循环,不停的迭代。
  2. Java的栈的设置:
  3. java -Xss 10M stackHeapDemo01

  1. 一般情况下,调的是堆的大小。栈不调解,栈默认是1M

1.9 对象的内存结构

image_1bp08h59egn91b9ttoc17mh114d7b.png-268kB

1.10 jvm 堆栈初探

  1. 一: 查看运行的Java 进程
  2. jps [v] //显示可提取PID
  3. 二:查看指定Java进程的对空间
  4. jmap -heap pid // jmap 也是jdk 自带工具
  5. // linux 下切换到root。
  6. 三: Java中对象和数组位于堆内存当中,局部变量。函数参数等位于栈内存当中。
  7. 四:默认jvm 分配的栈空间大小是1M
  8. 五: 默认jvm分配的堆空间是最大值是1/4 物理内存。

1.11 匿名对象

  1. 1. 匿名对象是对象的简化形式
  2. 2. 匿名对象两种使用情况
  3. 1. 当对对象方法仅进行一次调用的时。
  4. 2. 匿名对象可以昨晚实际参数进行传递。
  1. package com.learnjava.day04;
  2. public class ClassDemo01 {
  3. public static void main(String[] args) {
  4. //创建对象
  5. //局部变量
  6. Persion p = new Persion();
  7. Persion p1 = new Persion();
  8. p.age = 14;
  9. p.hight = 165;
  10. p.weight = 160;
  11. // Persion p1 = p;
  12. // 匿名对象。 只访问一次。
  13. new Persion();
  14. new Persion().age = 18 ;
  15. // 做为参数进行传参
  16. run0(new Persion());
  17. // System.out.println(p.age);
  18. // p.run();
  19. // p.seep();
  20. // System.out.println(p1.weight);
  21. }
  22. public static void run0(Persion p) {
  23. p.run();
  24. }
  25. }
  26. class Persion {
  27. //成员变量
  28. int hight;
  29. int weight;
  30. int age;
  31. //成员方法
  32. public void run() {
  33. System.out.println("run.........");
  34. }
  35. public void seep() {
  36. System.out.println("zzzzz~~~~~~");
  37. }
  38. }

1.12 面向对象封装:

  1. 1. 封装(encapsulation
  2. 封装:是指隐藏对象的属性和实现细节,仅提供访问方式。
  3. 2. 好处:
  4. 2.1 将变化隔离
  5. 2.2 便于使用
  6. 2.3 提高重用性
  7. 2.4 提高安全性
  8. ---
  9. 3. 封装的原则:
  10. 3.1 将不需要对外提供的内容都隐藏起来
  11. 3.2 把属性都隐藏,提供公共方法对其访问。
  12. 4. private (私有)关键字
  13. 1. 是一个权限修饰符
  14. 2. 用于修饰成员(成员变量和成员函数)
  15. 3. 被私有化的成员只在本类中有效。
  16. 常用之一:
  17. 将成员变量私有化,对外提供对应的set ,get 方法对其进行的访问
  18. 提高对数据访问的安全性
  1. package com.learnjava.day04;
  2. public class ClassDemo03 {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. RichMan wsc = new RichMan();
  6. wsc.setMoney(10000000);
  7. System.out.println(wsc.getMoney());
  8. }
  9. }
  10. class RichMan {
  11. private int money ;
  12. public int getMoney() {
  13. return money;
  14. }
  15. public void setMoney(int money) {
  16. this.money = money;
  17. }
  18. }

image_1bp0iqigb1jmgfsf18io1oqc17qg7o.png-32.3kB

1.13 构造函数:

  1. 1. 函数名和类型相同
  2. 2. 没有返回值
  3. -- 2.1 创建之后肯定返回的该对象。
  4. 3. 如果类没有定义构造函数,jvm分配一个空构造
  5. 如果类定义了构造函数,没有空构造
  6. 4. 构造函数也可以重载
  7. 特点:
  8. 1. 函数名与类名相同
  9. 2. 不用定义返回值类型
  10. 3. 没有具体的返回值。
  11. 作用:
  12. 给对象进行初始化
  13. 注意:
  14. 1. 默认构造函数的特点
  15. 2. 多个构造函数式是以重载的形式存在的。

1.14 构造代码块

  1. 1.代码块:
  2. 代码中使用单独的{} 围起来的内容
  3. 2. 构造代码块
  4. 2.1 类的成员之一
  5. 2.2 使用{} 起来的一段代码
  6. 2.3 创建对象时,先于构造函数调用
  7. 3. 局部代码块
  8. 方法内定义的代码块。
  9. ----
  10. 对象创建过程:
  11. 1. 构造代码块
  12. 从上到下按顺执行。
  13. 2. 构造函数
  14. 3. 成员变量
  15. a.color = null;
  16. b.color = "black";
  17. c.构造代码块
  18. d.构造函数
  19. 4.Javabean
  20. pojo : plain old java object ;
  21. class Dog {
  22. private String color ;
  23. public String getColor(){
  24. return color;
  25. }
  26. }
  27. 类的成员:
  28. 成员变量
  29. 成员函数
  30. 构造函数
  31. 构造代码块
  32. 静态代码块: 类加载之前进行,而且只执行一次
  33. 静态成员之间可以相互访问,按序执行
  34. 静态成员不可以访问非静态成员。
  35. 非静态成员可以访问静态成员。
  36. 静态成员通过类访问(和对象无关 person.boold
  37. 使用static 修饰的代码构造块,在类的加载时调用一次,以后不在调用,通常放置对静态成员变量的初始化过程。
  1. package com.learnjava.day05;
  2. public class DemoPerson {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. {
  6. System.out.println("3. 构造代码块");
  7. }
  8. Person p = new Person();
  9. p.setName("小明");
  10. System.out.println(p.getName());
  11. p.setAge(18);
  12. System.out.println(p.getAge());
  13. System.out.println(Person.blood);
  14. }
  15. }
  16. class Person{
  17. // 构造代码块
  18. {
  19. System.out.println("1.构造代码块");
  20. }
  21. // 静态成员
  22. public static String blood = "白种人";
  23. static {
  24. // 静态成员只能访问静态成员,无法访问非静态成员
  25. System.out.println(blood);
  26. System.out.println("静态代码块");
  27. }
  28. private int age ;
  29. private String name;
  30. private String job;
  31. public int getAge() {
  32. return age;
  33. }
  34. public void setAge(int age) {
  35. this.age =age;
  36. }
  37. /**
  38. * @return the name
  39. */
  40. public String getName() {
  41. return name;
  42. }
  43. /**
  44. * @param name the name to set
  45. */
  46. public void setName(String name) {
  47. this.name = name;
  48. }
  49. /**
  50. * @return the job
  51. */
  52. public String getJob() {
  53. return job;
  54. }
  55. /**
  56. * @param job the job to set
  57. */
  58. public void setJob(String job) {
  59. this.job = job;
  60. }
  61. {
  62. System.out.println("2. 构造代码块");
  63. }
  64. }

image_1bp5v5vue1euar8uike1uo8q30m.png-65.8kB

  1. this 关键字:
  2. 特点: this 代表其所在函数所属对象的引用。
  3. 换言之:this 代表本类对象的引用。
  4. 什么时候使用this 关键字?
  5. 当函数内需要用到调用该函数的对象时,就用this
  6. this.xxx
  7. -----
  8. 指向对象自身的引用,类似成员变量,使用private修饰。
  9. 静态方法不可以使用this
  10. ----
  11. this()
  12. -----
  13. 访问当前类的构造函数
  14. this()的调用必须是第一条语句。
  15. 为了构造函数的重用。

  1. static (静态)关键字
  2. 1. 用于修饰成员(成员变量和成员函数)
  3. 2. 被修饰后的成员具备一下特点:
  4. 2.1 随着类的加载而加载
  5. 2.2 优先于对象存在
  6. 2.3 被所有对象所共享
  7. 2.4 可以直接被类名调用
  8. 3. 使用注意:
  9. 3.1 静态方法只鞥访问静态成员
  10. 3.2 静态方法中不可以写thissuper 关键字
  11. 3.3 主函数式静态的。
  1. package com.learnjava.day04;
  2. public class ClassDemo04 {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. Dog d = new Dog();
  6. d.setName("小白");
  7. d.setColor("黄色");
  8. d.setAge(18);
  9. System.out.println(d.getName());
  10. System.out.println(d.getColor());
  11. System.out.println(d.getAge());
  12. }
  13. }
  14. class Dog {
  15. private String name ;
  16. private String color;
  17. private int age ;
  18. public String getName() {
  19. return name;
  20. }
  21. public void setName(String name) {
  22. this.name = name;
  23. }
  24. public String getColor() {
  25. return color;
  26. }
  27. public void setColor(String color) {
  28. this.color = color;
  29. }
  30. public int getAge() {
  31. return age;
  32. }
  33. public void setAge(int age) {
  34. this.age = age;
  35. }
  36. }

image_1bp0lrt7u1n3j14lh1s9147m5jp85.png-32.4kB

  1. package com.learnjava.day04;
  2. public class ClassDemo04 {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. Dog d = new Dog();
  6. d.setName("小白");
  7. d.setColor("黄色");
  8. d.setAge(18);
  9. System.out.println(d.getName());
  10. System.out.println(d.getColor());
  11. System.out.println(d.getAge());
  12. Dog d1 = new Dog("小红","红色",13);
  13. // d1.setName("小绿");
  14. System.out.println(d1.getName());
  15. System.out.println(d1.getColor());
  16. System.out.println(d1.getAge());
  17. }
  18. }
  19. class Dog {
  20. private String name ;
  21. private String color;
  22. private int age ;
  23. // 空参数的对象
  24. public Dog() {
  25. }
  26. //带参数的 对象
  27. public Dog(String name,String color , int age) {
  28. this.name = name;
  29. this.color = color;
  30. this.age = age;
  31. }
  32. public String getName() {
  33. return name;
  34. }
  35. public void setName(String name) {
  36. this.name = name;
  37. }
  38. public String getColor() {
  39. return color;
  40. }
  41. public void setColor(String color ) {
  42. this.color = color;
  43. }
  44. public int getAge() {
  45. return age;
  46. }
  47. public void setAge(int age) {
  48. this.age = age;
  49. }
  50. }

image_1bp0nenlmsjq162l63i1ln41uou8i.png-35.2kB

  1. package com.learnjava.day04;
  2. public class ClassBenz {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. System.out.println(Benz.Brand);
  6. Benz b1 = new Benz();
  7. b1.setColor("白色");
  8. System.out.println(b1.getColor());
  9. }
  10. }
  11. class Benz{
  12. static String Brand = "BENZ";
  13. private String color = "黑色" ;
  14. // 构造代码块
  15. {
  16. System.out.println(color);
  17. }
  18. public Benz() {
  19. System.out.println(color);
  20. }
  21. public Benz(String color) {
  22. this();
  23. this.color = color;
  24. }
  25. public Benz(String color , int tires) {
  26. this (color);
  27. System.out.println(color);
  28. }
  29. public String getColor() {
  30. return color;
  31. }
  32. public void setColor(String color) {
  33. this.color = color;
  34. }
  35. }

image_1bp63dsvs1osgulb1v42t0915ql13.png-53.7kB

百钱买百鸡

  1. package com.learnjava.day05;
  2. /**
  3. *
  4. * @author zhangyy
  5. *
  6. * 百钱买百鸡
  7. *
  8. * 公鸡 :5/只
  9. * 母鸡: 3/只
  10. * 小鸡: 1/3只
  11. *
  12. * 100 买100 只鸡
  13. */
  14. public class BuyChick {
  15. public static void main(String[] args) {
  16. // TODO Auto-generated method stub
  17. for(int i =0 ; i< 100/5 ; i++) {
  18. for(int j = 0; j < 100/3 ; j++) {
  19. for(int k = 0 ; k < 100 ; k = k+3) {
  20. int money = i * 5 + j * 3 + (k/3) ;
  21. int count = i + j + k ;
  22. if (money == 100 && count ==100) {
  23. System.out.println("公鸡:"+ i + ",母鸡:"+ j + ",小鸡:" +k);
  24. }
  25. }
  26. }
  27. }
  28. }
  29. }

image_1bp7q3ebn1n87edv13afoekrj59.png-47.6kB

二: Java 的继承

2.1 继承的概述:

  1. 1. 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无锡在定义这些属性和行为,只要继那个类即可。
  2. 2. 多个类可以称为子类,单独这个类称为父类或者超类。
  3. 3. 子类可以直接访问父类中的非私有的属性和行为。
  4. 4. 通过extends 关键字让类与类之间产生继承关系。
  5. 4.1 class SubDemo extends Demo{}
  6. 5. 继承的出现提高了代码的复用性
  7. 6. 继承的出现让类与类之间产生了关系,提供了多态的前提。


2.2 继承的特点:

  1. 1. java只支持单继承,不支持多继承
  2. 1.1 一个类只能有一个父类,不可以有多个父类
  3. 1.2 class SubDemo extends Demo{} // ok
  4. 1.3 class SubDemo extends Demo1,Demo2...// error
  5. ---
  6. 2. java 支持多层继承(继承体系)
  7. 2.1 class A {}
  8. 2.2 class B extends A {}
  9. 2.3 class C extends B {}
  10. 3. 定义继承需要注意:
  11. 3.1 不要仅为了获取其他类中某个功能而去继承
  12. 3.2 类与类之间要有所属("is a ")关系,xx1 xx2 的一种。
  13. ----
  14. 继承:
  15. 1. extends
  16. 2. 只支持 单从继承
  17. 3. 支持多层继承
  1. package com.learnjava.day04;
  2. public class ExtendDemo06 {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. Cat c = new Cat();
  6. c.color = "黑色";
  7. System.out.println(c.color);
  8. }
  9. }
  10. class Animal{
  11. String color;
  12. int height;
  13. }
  14. class Cat extends Animal {
  15. }

image_1bp0t28pcpr8gimpul1re5qt48v.png-49.1kB


2.3 super 关键字:

  1. super this 的用法想象
  2. this 代表本类对象的引用
  3. super 代表父类的内存空间的标示
  4. 当 子付类出现同名成员时,可以用super 进行区分
  5. 子类要调用父类构造函数时,可以使用super 语句。
  6. ----
  7. 1.访问超类的构造函数
  8. 2. 必须是第一行代码
  9. 3. 构造函数的首行要么是this(),要么是super(); 默认是super()

  1. package com.learnjava.day05;
  2. public class ExtendsAnimal {
  3. public static void main(String[] args) {
  4. Jing8 J = new Jing8(null);
  5. J.age = 18;
  6. System.out.println(J.age);
  7. System.out.println(J.color);
  8. }
  9. }
  10. class Animal{
  11. String color;
  12. String name;
  13. int age ;
  14. public Animal(String color) {
  15. this.color = color;
  16. }
  17. }
  18. class Dog extends Animal {
  19. public Dog(String color) {
  20. super("white");
  21. // TODO Auto-generated constructor stub
  22. }
  23. }
  24. class Jing8 extends Dog {
  25. public Jing8(String color) {
  26. super(color);
  27. // TODO Auto-generated constructor stub
  28. }
  29. }

image_1bp68jb24sjo812egp7031qq51g.png-43.3kB

2.4 函数的覆盖:

  1. 1. 子类中出现与父类一模一样的方法时,会出现覆盖操作,也称为重写或者复写
  2. 2.父类中的私有方法不可以被覆盖。
  3. 3.在子类覆盖方法中,继续使用被覆盖的方法可以通过super ,函数名获取。
  4. 覆盖注意事项:
  5.   覆盖时,子类方法权限一定要大于等于父类方法权限
  6.   静态只能覆盖静态。
  7.   
  8. 覆盖的应用:
  9.   当子类需要父类的功能,二功能主题子类有自己特有内容时,可以复写父类中的方法,这样,既沿袭了父类的功能,又定义了子类特有的内容。
  10.   
  11.   函数覆盖:
  12. 1.overwrite
  13. 重写
  14. 复写
  15. 2. 只有在继承的时候才有重写
  16. 3. private 方法不可以覆盖
  17.  
  18. 类的的成员:
  19.   成员函数
  20.   成员变量
  21.   构造函数
  22.   构造代码块
  23.   静态代码块
  24.   --------
  25.    

  1. package com.learnjava.day05;
  2. public class ClassDemo01 {
  3. public static void main(String[] args) {
  4. Son s1 = new Son();
  5. s1.eat();
  6. s1.run();
  7. s1.setAsset(100000);
  8. System.out.println(s1.getAsset());
  9. }
  10. }
  11. class Father {
  12. String name ;
  13. private int asset ;
  14. public void eat() {
  15. System.out.println("洗手!!!!!!");
  16. }
  17. public void walk() {
  18. System.out.println("walk......");
  19. }
  20. /**
  21. * @return the asset
  22. */
  23. public int getAsset() {
  24. return asset;
  25. }
  26. /**
  27. * @param asset the asset to set
  28. */
  29. public void setAsset(int asset) {
  30. this.asset = asset;
  31. }
  32. }
  33. class Son extends Father{
  34. public void eat() {
  35. //super.eat();
  36. System.out.println("洗澡!!!!!!");
  37. }
  38. public void run() {
  39. super.walk();
  40. this.walk();
  41. System.out.println("run......");
  42. }
  43. public void walk() {
  44. }
  45. }

image_1bp8bsklhd9grcla8m1icp1hrom.png-45.6kB

2.5 子类的实例化过程:

  1. 1. 子类中所有的构造函数默认都会访问父类中空参的构造函数
  2. 2. 因为每一个构造函数的第一行都有一条默认的语句super();
  3. 3. 子类会具备父类中的数据,所以要先明确父类是如何对这些数据初始化的
  4. 4. 当父类中没有空参的构造函数时,子类的构造函数必须通过this 或者 super 语句指定要访问的构造函数。
  1. package com.learnjava.day05;
  2. public class ClassDemo03 {
  3. public static void main(String[] args) {
  4. Jing8 J = new Jing8();
  5. J.run();
  6. }
  7. }
  8. class Animal {
  9. String category;
  10. public Animal() {
  11. System.out.println("new Animail()");
  12. }
  13. public void run() {
  14. System.out.println("run......");
  15. }
  16. }
  17. class Dog extends Animal {
  18. String color ;
  19. public Dog (String c) {
  20. System.out.println("new Dog()");
  21. }
  22. }
  23. class Jing8 extends Dog {
  24. String blood ;
  25. public Jing8() {
  26. super("kkkk");
  27. System.out.println("new Jing()");
  28. }
  29. }

image_1bp8cc9qt1hes1a2l3r31n6p11f613.png-40kB

2.5 final 关键字

  1. final
  2. 1. 最终的。
  3. 2. 修饰类,不能被继承
  4. 3. 修饰方法,不能覆盖
  5. 4. 修饰变量,不能修改,只能赋值一次,常量
  6. 内部类:
  7. 1. 定义在类内部的类称为内部类
  8. 2. 内部类可以在类成员位置上
  9. 编译时产生的类:外部类$内部类名称 如: Benz$Engine.class
  10. 3.内部类还可以在方法内部定义。
  11. Benz$1Engine.class
  12. 方式出现。
  13. 4. 内部类在访问局部变量时,不能对局部变量进行重新赋值。Java8 已经不需要用final进行修饰。
  1. package com.learnjava.day05;
  2. public class ClassDemo03 {
  3. public static void main(String[] args) {
  4. Jing8 J = new Jing8();
  5. J.run();
  6. // J.color = "block";
  7. }
  8. }
  9. class Animal {
  10. String category;
  11. public Animal() {
  12. System.out.println("new Animail()");
  13. }
  14. public final void run() {
  15. System.out.println("run......");
  16. }
  17. }
  18. class Dog extends Animal {
  19. final String color = "黄色" ;
  20. public Dog () {
  21. System.out.println("new Dog()");
  22. }
  23. }
  24. final class Jing8 extends Dog {
  25. String blood ;
  26. public Jing8() {
  27. System.out.println("new Jing()");
  28. }
  29. }

image_1bp8du40j1db713c5nod1knic4f1j.png-42.7kB

  1. package com.learnjava.day05;
  2. public class InnerClassDemo {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. BaoM b = new BaoM();
  6. b.run();
  7. }
  8. }
  9. class BaoM{
  10. String color;
  11. int tires;
  12. public void run() {
  13. Engine e = new Engine();
  14. e.fire();
  15. System.out.println("run....");
  16. }
  17. // 内部类
  18. class Engine{
  19. public void fire() {
  20. System.out.println("fire....");
  21. }
  22. }
  23. }

image_1bp8f05tpu0p1j5r10ehr4e1op920.png-37.4kB

  1. package com.learnjava.day05;
  2. public class InnerClassDemo {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. BaoM b = new BaoM();
  6. b.run("key9999");
  7. }
  8. }
  9. class BaoM{
  10. String color;
  11. int tires;
  12. public void run(String key) {
  13. // 内部类
  14. class Engine{
  15. public void fire() {
  16. System.out.println("key is ready" + key);
  17. System.out.println("fire....");
  18. }
  19. }
  20. Engine e = new Engine();
  21. e.fire();
  22. System.out.println("run....");
  23. }
  24. }

image_1bp8fphsp1c0h1eni1c3c12el1rjs2q.png-34.2kB

2.6 抽象类:

  1. 抽象类的概述:
  2. 1. 抽象类定义:
  3. 1.1 抽象就是从多个事物中将共性,本质的内容抽取出来。
  4. 如: 狼和狗 共享都是犬科,犬科就是抽象出来的概念
  5. 2. 抽象类:
  6. Java 中可以定义没有方法体的方法,该方法的具体实现由子类完成。
  7. 该方法称为抽象方法,包含抽象方法的类就是抽象类。
  8. 3. 抽象方法的由来。
  9. 3.1 多个对象都具备相同的功能,但是功能具体内容有所不同,那么在抽取过程中,只抽取了功能的定义,并未抽取功能主体,那么只有功能声,没有功能主体的方法为抽象方法。
  10. 如:狼和狗都有吼叫的方法,可是吼叫内容时不一样的,所以抽象出来的犬科虽然有吼叫功能,但是并不明确吼叫的细节。
  11. 抽象类:
  12. -------
  13. 1. 抽象方法:
  14. 没有函数体的方法,必须使用abstract 修饰
  15. 抽象方法必须在抽象类中
  16. 抽象类不允许实例化
  17. 抽象类有构造函数
  1. 1. 抽象类和抽象方法必须用abstract 关键字来修饰
  2. 2. 抽象方法只有方法声明,没有方法体,定义在抽象类中。
  3. 格式: 修饰符 abstract 返回值类型 函数名(参数列表);
  4. 3. 抽象类不可以被实例化,也就是不可以用new 来创建对象。原因如下:
  5. 3.1 抽象类似具体事物抽取出来的,本身是不具体的,没有对应的实例、
  6. 如: 犬科是一个抽象概念,真正存在的是狼和狗
  7. 3.2 抽象类即使创建了对象,调用很抽象方法也没有意义。
  8. 4. 抽象类通过其子类实例化,而子类需要覆盖掉抽象类中所用的抽象方法后才可以创建对象,否则该子类也是抽象类
  1. package com.learnjava.day05;
  2. public class AbstractClassDemo01 {
  3. public static void main(String[] args) {
  4. Dog d = new Dog();
  5. d.cry();
  6. Cat c = new Cat();
  7. c.cry();
  8. }
  9. }
  10. abstract class Animal {
  11. // 抽象类
  12. abstract public void cry();
  13. }
  14. class Dog extends Animal{
  15. public void cry() {
  16. System.out.println("汪汪汪。。。。。");
  17. }
  18. }
  19. class Cat extends Animal{
  20. public void cry() {
  21. System.out.println("喵喵喵。。。。。");
  22. }
  23. }

image_1bp8ijn84fclg8v11i255jgi83n.png-41.4kB

2.7 Java的修饰符

  1. 类修饰符:
  2. public(访问控制符),将一个类声明为公共类,他可以被任何对象访问,一个程序的主类必须是公共类。
  3. abstract,将一个类声明为抽象类,没有实现的方法,需要子类提供方法实现。
  4. final,将一个类生命为最终(即非继承类),表示他不能被其他类继承。
  5. friendly,默认的修饰符,只有在相同包中的对象才能使用这样的类。
  6. 成员变量修饰符:
  7. public(公共访问控制符),指定该变量为公共的,他可以被任何对象的方法访问。
  8. private(私有访问控制符)指定该变量只允许自己的类的方法访问,其他任何类(包括子类)中的方法均不能访问。
  9. protected(保护访问控制符)指定该变量可以别被自己的类和子类访问。在子类中可以覆盖此变量。
  10. friendly ,在同一个包中的类可以访问,其他包中的类不能访问。
  11. final,最终修饰符,指定此变量的值不能变。
  12. static(静态修饰符)指定变量被所有对象共享,即所有实例都可以使用该变量。变量属于这个类。
  13. transient(过度修饰符)指定该变量是系统保留,暂无特别作用的临时性变量。
  14. volatile(易失修饰符)指定该变量可以同时被几个线程控制和修改。
  15. 方法修饰符:
  16. public(公共控制符)
  17. private(私有控制符)指定此方法只能有自己类等方法访问,其他的类不能访问(包括子类)
  18. protected(保护访问控制符)指定该方法可以被它的类和子类进行访问。
  19. final,指定该方法不能被重载。
  20. static,指定不需要实例化就可以激活的一个方法。
  21. synchronize,同步修饰符,在多个线程中,该修饰符用于在运行前,对他所属的方法加锁,以防止其他线程的访问,运行结束后解锁。
  22. native,本地修饰符。指定此方法的方法体是用其他语言在程序外部编写的。
  1. private + abstract
  2. final + abstract

三 java 的接口

3.1 回顾

  1. oop :
  2. class
  3. 类成员
  4. ----
  5. 构造函数: 和类同名,没有返回值。可以重载
  6. this(),super(x,s,s,s)
  7. 成员变量:private public
  8. 成员函数:
  9. 静态代码块: 类加载时执行
  10. {} // 构造代码块
  11. 抽象类:
  12. ----
  13. abstract 修饰类,不能实例化。
  14. 抽象方法:
  15. 没有方法体的方法。abstract
  16. 让子类去实现具体细节。
  17. final
  18. final class // 不能继承
  19. final 方法 // 不能重写
  20. final 变量 //常量
  21. 内部类:
  22. ----
  23. 定义在类的内部类
  24. Benz$Engine
  25. 定义在方法内部:
  26. Benz$nEngine
  27. JVM
  28. ------
  29. 方法区
  30. 栈区: -xss
  31. 堆区: -Xmx -Xms
  32. 非法组合:
  33. abstract + private
  34. abstract + final
  35. private + final // 不是,多此一举的
  1. package com.learnjava.day06;
  2. public class InnerDemo01 {
  3. public static void main(String[] args) {
  4. Benz.Engine e = new Benz.Engine();
  5. e.fire();
  6. }
  7. }
  8. class Benz{
  9. private String color;
  10. private int tries;
  11. // 内部类
  12. static class Engine{
  13. public void fire() {
  14. System.out.println("fire.....");
  15. }
  16. }
  17. /**
  18. * @return the color
  19. */
  20. public String getColor() {
  21. return color;
  22. }
  23. /**
  24. * @param color the color to set
  25. */
  26. public void setColor(String color) {
  27. this.color = color;
  28. }
  29. /**
  30. * @return the tries
  31. */
  32. public int getTries() {
  33. return tries;
  34. }
  35. /**
  36. * @param tries the tries to set
  37. */
  38. public void setTries(int tries) {
  39. this.tries = tries;
  40. }
  41. }

image_1bp8lhlk95u5k5411811i8a12ah44.png-30kB

3.2 接口

  1. interface 接口:
  2. 1. 接口中的成员修饰符石固定的
  3. 1.1 成员变量:public static final
  4. 1.2 成员函数:public abstract
  5. 1.3 发现接口中的都是public
  6. 2. 接口的出现将“多继承”通过另一种形式体现出来,既“多实现”
  7. 接口中的所有方法都是抽象的
  8. 接口:最低标准
  9. 降低耦合度,降低交互的程度
  10. 类和接口之间是实现关系
  11. 类可以实现多个接口。
  12. 3.接口的特点:
  13. 3.1 接口是对外暴露的规则
  14. 3.2 接口是程序的功能扩展
  15. 3.3 接口是出现降低耦合性
  16. 3.4 接口是可以用来多实现
  17. 3.5 类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口
  18. 3.6 接口与接口之间可以有继承关系

image_1bpae34ov1qaa1l8cme4p6k1ahnp.png-376.5kB

  1. package com.learnjava.day06;
  2. public class InterfaceDemo01 {
  3. public static void main(String[] args) {
  4. WomenStar ws = new WomenStar();
  5. ws.white();
  6. ws.rich();
  7. TuHao t = new TuHao();
  8. t.marry(ws);
  9. KoreanMan m1 = new KoreanMan();
  10. t.marry(m1);
  11. }
  12. }
  13. // 定义一个接口
  14. interface White {
  15. //白
  16. public void white();
  17. }
  18. interface Rich {
  19. public void rich();
  20. }
  21. // 类实现接口
  22. class WomenStar implements White,Rich{
  23. public void white() {
  24. System.out.println("很白");
  25. }
  26. public void rich() {
  27. System.out.println("有钱");
  28. }
  29. }
  30. class TuHao {
  31. // white 是接口
  32. public void marry(White w) {
  33. w.white();
  34. }
  35. }
  36. class KoreanMan implements White {
  37. public void white() {
  38. System.out.println("白面小生");
  39. }
  40. }

image_1bpag14h9q3fq6h14nm1j7n2nu16.png-43.4kB

  1. package com.learnjava.day06;
  2. public class InterfaceDemo02 {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. // 创建usb 设备
  6. MP3 mp3 = new MP3();
  7. Fan fan = new Fan();
  8. Camera c = new Camera();
  9. //创建一台电脑
  10. Computer com = new Computer();
  11. // 传参
  12. com.insert(mp3);
  13. com.insert(fan);
  14. com.insert(c);
  15. }
  16. }
  17. interface USB{
  18. public void play();
  19. }
  20. class MP3 implements USB{
  21. public void play() {
  22. System.out.println("啦啦啦。。。。。");
  23. }
  24. }
  25. class Fan implements USB {
  26. public void play() {
  27. System.out.println("好 凉快啊。。。。。");
  28. }
  29. }
  30. class Camera implements USB{
  31. public void play() {
  32. System.out.println("咔嚓。。。。。");
  33. }
  34. }
  35. class Computer {
  36. public void insert (USB usb) {
  37. System.out.println("usb is ok");
  38. usb.play();
  39. }
  40. }

image_1bpag225g1q8muanbc2eptt981j.png-41kB

  1. package com.learnjava.day06;
  2. public class InterfaceDemo03 {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. Jing8 j = new Jing8();
  6. j.cry();
  7. Eater e1 = new Eater();
  8. e1.eat(j);
  9. RichMan r = new RichMan();
  10. r.feed(j);
  11. }
  12. }
  13. abstract class Animal{
  14. abstract void cry();
  15. }
  16. class Dog extends Animal {
  17. void cry() {
  18. System.out.println("汪汪。。。。。");
  19. }
  20. }
  21. class Jing8 extends Dog implements Eatable,Pet{
  22. @Override
  23. public void eat() {
  24. // TODO Auto-generated method stub
  25. System.out.println("香肉很好吃");
  26. }
  27. @Override
  28. public void meng() {
  29. // TODO Auto-generated method stub
  30. System.out.println("宠物很好养");
  31. }
  32. }
  33. interface Eatable{
  34. public void eat();
  35. }
  36. interface Pet {
  37. public void meng();
  38. }
  39. class Eater{
  40. public void eat(Eatable e) {
  41. System.out.println("food is ok");
  42. e.eat();
  43. }
  44. }
  45. class RichMan{
  46. public void feed(Pet p) {
  47. System.out.println("宠物已经就位");
  48. p.meng();
  49. }
  50. }

image_1bpahv3gh1st6sovd2qeioc1n20.png-60.2kB

3.3 抽象类与继承的关系

image_1bpas5lel1f6o1f3t19go8hb17hb2d.png-571.9kB

  1. package com.learnjava.day06;
  2. public class InterfaceDemo01 {
  3. public static void main(String[] args) {
  4. WomenStar ws = new WomenStar();
  5. // ws.beauty();
  6. // ws.rich();
  7. // ws.white();
  8. TuHao t = new TuHao();
  9. t.marry(ws);
  10. // KoreanMan m1 = new KoreanMan();
  11. // t.marry(m1);
  12. }
  13. }
  14. // 定义一个接口
  15. interface White {
  16. //白
  17. public void white();
  18. }
  19. interface Rich {
  20. public void rich();
  21. }
  22. interface Beauty{
  23. public void beauty();
  24. }
  25. // 继承接口的所有性质
  26. interface WRB extends White,Rich,Beauty {
  27. }
  28. // 类实现接口
  29. class WomenStar implements WRB{
  30. public void white() {
  31. System.out.println("很白");
  32. }
  33. public void rich() {
  34. System.out.println("有钱");
  35. }
  36. @Override
  37. public void beauty() {
  38. // TODO Auto-generated method stub
  39. System.out.println("漂亮");
  40. }
  41. }
  42. class TuHao {
  43. // white 是接口
  44. public void marry(WRB wrb) {
  45. wrb.white();
  46. wrb.beauty();
  47. wrb.rich();
  48. }
  49. }
  50. //class KoreanMan implements White {
  51. // public void white() {
  52. // System.out.println("白面小生");
  53. // }
  54. //}

image_1bpath74f16v17iq1rjg11gu5jt2q.png-47.8kB

四: Java的多态

4.1 java 的多态

  1. 多态:
  2. 1. 多种形态,多种状态
  3. 2. 好丈夫+好父亲 + 好儿子
  4. 3.dog
  5. new Dog();
  6. 4. 继承和实现是多态的前提
  7. 5. 类中方法可以覆盖,成员变量(资产)不能覆盖。
  8. ClassCastException; 类转换异常
  9. ------
  10. 定义: 某一类事物的多种存在形态。
  11. 如: 动物中猫,狗
  12. 猫这个对象对应的类型是猫类型
  13. -- x = new 猫();
  14. 同时猫也还是动物中的一种,也可以把猫称为动物。
  15. --动物 y = new 猫();
  16. 动物是猫和狗具体事物中抽取出来的父类型。
  17. 父类型引用指向了子类对象。
  18. 多态的特点:
  19. 1. 成员函数:
  20. 1.1 编译时: 要查看引用变量所属的类中是否有所调用的成员
  21. 1.2 在运行时: 要查看对象所属的类中是否所调用的成员
  22. 2. 成员变量
  23. 2.1 只看引用比那里所属的类。
  1. package com.learnjava.day06;
  2. public class DeployDemo01 {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. Dog d = new Dog();
  6. d.cry();
  7. d.sleep();
  8. Animal d1 = new Dog();
  9. d1.sleep();
  10. Animal a1 = d ;
  11. a1.cry();
  12. a1.sleep();
  13. Dog d2 = (Dog)d1;
  14. Cat c = new Cat();
  15. c.cry();
  16. }
  17. }
  18. class Animal{
  19. void cry() {
  20. }
  21. public void sleep() {
  22. // TODO Auto-generated method stub
  23. }
  24. }
  25. class Dog extends Animal{
  26. public void cry() {
  27. System.out.println("wang wang wang .....");
  28. }
  29. public void sleep() {
  30. System.out.println("睡觉");
  31. }
  32. }
  33. class Cat extends Animal{
  34. public void cry() {
  35. System.out.println("喵喵。。。。。");
  36. }
  37. }

image_1bpb373941cke1cg43a51gkvp3637.png-40.2kB

  1. package com.learnjava.day06;
  2. public class DeployDemo01 {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. Dog d = new Dog();
  6. d.cry();
  7. d.sleep();
  8. Animal d1 = new Dog();
  9. d1.sleep();
  10. Eatable e1 = d;
  11. e1.eat();
  12. Animal a1 = d ;
  13. a1.cry();
  14. a1.sleep();
  15. Dog d2 = (Dog)d1;
  16. Cat c = new Cat();
  17. c.cry();
  18. }
  19. }
  20. class Animal{
  21. void cry() {
  22. }
  23. public void sleep() {
  24. // TODO Auto-generated method stub
  25. }
  26. }
  27. interface Eatable{
  28. public void eat();
  29. }
  30. class Dog extends Animal implements Eatable{
  31. public void cry() {
  32. System.out.println("wang wang wang .....");
  33. }
  34. public void sleep() {
  35. System.out.println("睡觉");
  36. }
  37. public void eat() {
  38. System.out.println("可以吃。。。。");
  39. }
  40. }
  41. class Cat extends Animal{
  42. public void cry() {
  43. System.out.println("喵喵。。。。。");
  44. }
  45. }

image_1bpb3jk8eg511odv14i710ktddk3k.png-38.8kB

  1. package com.learnjava.day06;
  2. public class DeployDemo02 {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. Jing8 J = new Jing8();
  6. System.out.println(J.name);
  7. J.cry();
  8. Dog d1 = new Jing8();
  9. d1.cry();
  10. System.out.println(d1.name);
  11. }
  12. }
  13. abstract class Animal{
  14. abstract void cry();
  15. }
  16. class Dog extends Animal{
  17. public String name = "小白";
  18. public void cry() {
  19. System.out.println("汪汪。。。。");
  20. }
  21. }
  22. class Jing8 extends Dog {
  23. public String name = "大黄";
  24. public void cry() {
  25. System.out.println(",,,,,, jing8 ..汪汪。。。。");
  26. }
  27. }

image_1bpb4feth19fd13ie19patpi4bp41.png-61.2kB

  1. package com.learnjava.day06;
  2. public class DeployDemo03 {
  3. public static void main(String[] args) {
  4. Benz b = new Benz();
  5. System.out.println(b.getColor());
  6. }
  7. }
  8. class Car {
  9. private String color = "黑色" ;
  10. public String getColor() {
  11. return color;
  12. }
  13. public void setColor(String color) {
  14. this.color = color;
  15. }
  16. }
  17. class Benz extends Car {
  18. private String color = "白色";
  19. public String getColor() {
  20. return color;
  21. }
  22. public void setColor(String color) {
  23. this.color = color;
  24. }
  25. }

image_1bpb5b5ng7tg1g221ts01l2h1qqi4e.png-30.4kB

  1. package com.learnjava.day06;
  2. public class DeployDemo03 {
  3. public static void main(String[] args) {
  4. // Benz b = new Benz();
  5. // System.out.println(b.getColor());
  6. // b.setColor("red");
  7. // System.out.println(b.getColor());
  8. Car c = new Benz();
  9. System.out.println(c.getColor());
  10. }
  11. }
  12. class Car {
  13. private String color = "无色" ;
  14. public String getColor() {
  15. return color;
  16. }
  17. public void setColor(String color) {
  18. this.color = color;
  19. }
  20. }
  21. class Benz extends Car {
  22. private String color = "黑色";
  23. public String getColor() {
  24. return super.getColor();
  25. }
  26. public void setColor(String color) {
  27. super.setColor(color);
  28. //this.color = color;
  29. }
  30. }

image_1bpb6k9s51tgd1a20lcvskr1vkl4r.png-49.8kB

4.2 匿名内部类

  1. 将类的定义,方法的实现,对象的创建一气呵成
  1. package com.learnjava.day06;
  2. public class DeployDemo04 {
  3. public static void main(String[] args) {
  4. WomenStar w = new WomenStar();
  5. RichMan r = new RichMan();
  6. r.findLover(w);
  7. // 匿名内部类;
  8. r.findLover(new WRB() {
  9. public void white() {
  10. System.out.println("很白");
  11. }
  12. });
  13. }
  14. }
  15. interface WRB{
  16. public void white();
  17. }
  18. class WomenStar implements WRB {
  19. public void white() {
  20. System.out.println("很白");
  21. }
  22. }
  23. class RichMan{
  24. public void findLover(WRB w) {
  25. w.white();
  26. }
  27. }

image_1bpb8bulq19lj1922556s441f6j58.png-46.2kB

  1. package com.learnjava.day06;
  2. public class DeployDemo05 {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. Pet p = new Pet(){
  6. public void meng() {
  7. run();
  8. System.out.println("ameng....");
  9. }
  10. public void run() {
  11. System.out.println("run....");
  12. }
  13. };
  14. p.meng();
  15. }
  16. }
  17. abstract class Pet{
  18. abstract void meng();
  19. }

image_1bpb9hqj61m5ien9gds1dns1o6a65.png-53kB

4.3 适配器模式

  1. GOF,Gang of Four, 四人帮。Java 的设计模式。

  1. package com.learnjava.day06;
  2. public class DeployDemo06 {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. Button b1 = new Button();
  6. b1.addListener(new MouseAdapter() {
  7. public void onDbclik() {
  8. // TODO Auto-generated method stub
  9. System.out.println("点击一下");
  10. }
  11. public void onClick() {
  12. // TODO Auto-generated method stub
  13. System.out.println("点击了两下");
  14. }
  15. });
  16. b1.click();
  17. b1.dbClick();
  18. }
  19. }
  20. interface MouseListener{
  21. public void onClick(); // 单击事件
  22. public void onDbclik(); // 双击事件
  23. //public void rightClik(); // 点击了右键
  24. }
  25. abstract class MouseAdapter implements MouseListener{
  26. public void rightClick() {
  27. }
  28. public void xxxxClick() {
  29. }
  30. }
  31. // 按钮
  32. class Button{
  33. public MouseListener listener;
  34. public void addListener(MouseListener listener) {
  35. this.listener = listener;
  36. }
  37. public void click() {
  38. listener.onClick();
  39. }
  40. public void dbClick() {
  41. listener.onDbclik();
  42. }
  43. }

image_1bpcvl1e81kcunrsa7j95f1a3mp.png-51.8kB

4.4 方法链编程

  1. package com.learnjava.day06;
  2. public class AdapterDemo {
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5. Button b = new Button();
  6. b.addListener(new MouseAdpart() {
  7. public void onClick() {
  8. System.out.println("单击了一下");
  9. }
  10. });
  11. b.click();
  12. // 方法链编程
  13. new Button().addListener(new MouseAdpart() {
  14. @Override
  15. public void onClick() {
  16. // TODO Auto-generated method stub
  17. System.out.println("单击了里面的button");
  18. }
  19. }).click();
  20. }
  21. }
  22. class Button{
  23. public MouseListener m;
  24. public Button addListener(MouseListener m) {
  25. this.m = m ;
  26. return this;
  27. }
  28. public void click() {
  29. m.onClick();
  30. }
  31. public void dbclick() {
  32. m.onDbCick();
  33. }
  34. }
  35. interface MouseListener{
  36. public void onClick();
  37. public void onDbCick();
  38. public void onRightClick();
  39. public void onMiddleClick();
  40. }
  41. abstract class MouseAdpart implements MouseListener {
  42. public void onClick() {}
  43. public void onDbCick() {}
  44. public void onRightClick() {}
  45. public void onMiddleClick() {}
  46. }

image_1bpd2g83k1s209tgrto18j917ep1m.png-38.4kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注