java面向对象高级一(共3集)

[复制链接]
admin 发表于 前天 21:17 | 显示全部楼层 |阅读模式
1.jpg


1,类的成分:构造器

1.jpg
2,实体类Javabean
1.jpg

关键字

1.jpg
4,static修饰成员变量
2.jpg
5,static修饰方法
1.jpg
6,静态方法的常见应用场景
1.jpg
7,静态方法,实例方法访问相关的几点注意事项

静态方法中可以直接访问静态成员,不可以直接访问实例成员。
实例方法中既可以直接访问静态成员,也可以直接访问实例成员。
实例方法中可以出现this关键字,静态方法中不可以出现this关键字的。

8,什么是继承?
1.jpg
9,什么是权限修饰符
就是是用来限制类中的成员(成员变量、成员方法、构造器)能够被访问的范围。
1.jpg 2.jpg


10,方法重写

当子类觉得父类中的某个方法不好用,或者无法满足自己的需求时,子类可以重写一个方法名称、参数列表一样的方法,去覆盖父类的这个方法,这就是方法重写。
重写小技巧:使用Override注解,他可以指定java编译器,检查我们方法重写的格式是否正确,代码可读性也会更好。

方法重写的其它注意事项
子类重写父类方法时,访问权限必须大于或者等于父类该方法的权限( public > protected > 缺省 )。
重写的方法返回值类型,必须与被重写方法的返回值类型一样,或者范围更小。
私有方法、静态方法不能被重写,如果重写会报错的。

方法重写是什么?
子类写了一个方法名称,形参列表与父类某个方法一样的方法去覆盖父类的该方法。
重写方法有哪些注意事项?
建议加上:@Override注解,可以校验重写是否正确,同时可读性好。
子类重写父类方法时,访问权限必须大于或者等于父类被重写的方法的权限。
重写的方法返回值类型,必须与被重写方法的返回值类型一样,或者范围更小。
私有方法、静态方法不能被重写。
方法重写有啥应用场景?
当子类觉得父类的方法不好用,或者不满足自己的需求时,就可以用方法重写。

11,子类构造器的特点
1.jpg

12,子类构造器调用父类构造器的场景应用场景
12.jpg
13,补充知识:this(…)调用兄弟构造器
12.jpg
14,什么是多态?
12.jpg

多态的好处
12.jpg
1.jpg
  1. package com.jinhei.demo;

  2. public class Test {
  3.     public static void main(String[] args) {
  4.         // 目标:认识多态的代码。
  5.         // 1、对象多态、行为多态。
  6.         Animal a1 = new Wolf();
  7.         a1.run(); // 方法:编译看左边,运行看右边
  8.         System.out.println(a1.name); // 成员变量:编译看左边,运行也看左边

  9.         Animal a2 = new Tortoise();
  10.         a2.run(); // 方法:编译看左边,运行看右边
  11.         System.out.println(a2.name); // 成员变量:编译看左边,运行也看左边
  12.     }
  13. }
复制代码
1.jpg

1.jpg
运行结果:
12.jpg
  1. package com.jinhei.demo;
  2. public class Test {
  3.     public static void main(String[] args) {
  4.         // 目标:认识多态的代码。
  5.         // 1、多态的好处1: 右边对象是解耦合的。
  6.         Animal a1 = new Tortoise();
  7.         a1.run();
  8.        // a1.shrinkHead(); // 多态下的一个问题:多态下不能调用子类独有功能。
  9.         // 强制类型转换:可以解决多态下调用子类独有功能
  10.         Tortoise t1 = (Tortoise) a1;
  11.         t1.shrinkHead();
  12.         // 有继承关系就可以强制转换,编译阶段不会报错!
  13.         // 运行时可能会出现类型转换异常:ClassCastException
  14.         // Wolf w1 = (Wolf) a1;
  15.         System.out.println("=======================");
  16.         Wolf w = new Wolf();
  17.         go(w);
  18.         Tortoise t = new Tortoise();
  19.         go(t);
  20.     }
  21.     public static void go(Animal a){
  22.         System.out.println("开始。。。。。");
  23.         a.run();
  24.         // a1.shrinkHead(); // 报错,多态下不能调用子类独有功能。
  25.         // java建议强制转换前,应该判断对象的真实类型,再进行强制类型转换。
  26.         if(a instanceof Wolf){
  27.             Wolf w1 = (Wolf) a;
  28.             w1.eatSheep();
  29.         }else if(a instanceof Tortoise){
  30.             Tortoise t1 = (Tortoise) a;
  31.             t1.shrinkHead();
  32.         }
  33.     }
  34. }
复制代码
多态下的类型转换问题
1.jpg

15,认识final
1.jpg

16,常量

12.jpg
17,枚举
1.jpg

12.jpg
枚举案例:
12.jpg

1.jpg

  1. package com.jinhei.demo;

  2. public class Constant {
  3.     public static final int UP = 0; // 上
  4.     public static final int DOWN = 1; // 下
  5.     public static final int LEFT = 2; // 左
  6.     public static final int RIGHT = 3; // 右
  7. }
复制代码
  1. package com.jinhei.demo;

  2. public enum Direction {
  3.     UP, DOWN, LEFT, RIGHT;
  4. }
复制代码
  1. package com.jinhei.demo;
  2. public class Test {
  3.     public static void main(String[] args) {
  4.         // 目标:掌握枚举类的应用场景:做信息的分类和标志。
  5.         // 需求:模拟上下左右移动图片。
  6.         // 第一种是常量做信息标志和分类: 但参数值不受约束。
  7.         move(Constant.UP);
  8.         // 第二种是枚举做信息标志和分类: 参数值受枚举类约束。
  9.         move2(Direction.DOWN);
  10.     }

  11.     public static void move2(Direction direction){
  12.         // 根据这个方向做移动:上下左右。
  13.         switch (direction){
  14.             case UP :
  15.                 System.out.println("向上移动");
  16.                 break;
  17.             case DOWN :
  18.                 System.out.println("向下移动");
  19.                 break;
  20.             case LEFT :
  21.                 System.out.println("向左移动");
  22.                 break;
  23.             case RIGHT :
  24.                 System.out.println("向右移动");
  25.                 break;
  26.         }
  27.     }

  28.     public static void move(int direction){
  29.         // 根据这个方向做移动:上下左右。
  30.         switch (direction){
  31.             case Constant.UP :
  32.                 System.out.println("向上移动");
  33.                 break;
  34.             case Constant.DOWN :
  35.                 System.out.println("向下移动");
  36.                 break;
  37.             case Constant.LEFT :
  38.                 System.out.println("向左移动");
  39.                 break;
  40.             case Constant.RIGHT :
  41.                 System.out.println("向右移动");
  42.                 break;
  43.             default:
  44.                 System.out.println("输入有误");
  45.         }
  46.     }
  47. }
复制代码
枚举类的特点
1.jpg
网站建设,公众号小程序开发,多商户单商户小程序制作,高端系统定制开发,App软件开发联系我们【手机/微信:17817817816
 楼主| admin 发表于 昨天 19:54 | 显示全部楼层
抽象类
1.jpg 12.jpg

1.jpg

2.jpg 3.jpg
  1. package com.jinhei.demo;
  2. // 抽象类
  3. public abstract class A {
  4.     private String name;
  5.     private int age;

  6.     public A() {
  7.         System.out.println("A的无参构造器");
  8.     }

  9.     public A(String name, int age) {
  10.         this.name = name;
  11.         this.age = age;
  12.     }
  13.     // 抽象方法:必须用abstract修饰,没有方法体,只有方法声明。
  14.     public abstract void show();

  15.     public void show1() {
  16.         System.out.println("show1方法");
  17.     }

  18.     public String getName() {
  19.         return name;
  20.     }

  21.     public void setName(String name) {
  22.         this.name = name;
  23.     }

  24.     public int getAge() {
  25.         return age;
  26.     }

  27.     public void setAge(int age) {
  28.         this.age = age;
  29.     }
  30. }
复制代码
  1. package com.jinhei.demo;

  2. // 一个类继承抽象类,必须重写完继承的全部抽象方法,否则这个类也必须定义成抽象类
  3. public class B extends A{
  4.     @Override
  5.     public void show() {
  6.         System.out.println("B类重写show方法");
  7.     }
  8. }
复制代码
  1. package com.jinhei.demo;

  2. public class Test {
  3.     public static void main(String[] args) {
  4.         // 目标:认识抽象类,抽象方法,搞清楚他们的特点。
  5.         // 抽象类的核心特点:有得有失(得到了抽象方法的能力,失去了创建对象的能力)
  6.         // 抽象类不能创建对象(重点)。
  7.         // A a = new A();  // 报错了
  8.         // 抽象类的使命就是被子类继承:就是为了生孩子。
  9.         B b = new B();
  10.         b.setName("张三");
  11.         b.setAge(18);
  12.         System.out.println(b.getName() + "---" + b.getAge());
  13.         b.show();
  14.         b.show1();
  15.     }
  16. }



复制代码
使用抽象类的好处
1.jpg


模板方法设计模式
1.jpg

1.jpg 2.jpg 3.jpg 4.jpg

接口的概述
1.jpg

public interface 接口名
// 成员变量(常量)
// 成员方法(抽象方法)
}

1.jpg 2.jpg 3.jpg 4.jpg


接口的好处

弥补了类单继承的不足,一个类同时可以实现多个接口,使类的角色更多,功能更强大。
让程序可以面向接口编程,这样程序员就可以灵活方便的切换各种业务实现(更利于程序的解耦合)。


接口新增的三种方法
1.jpg


1、JDK8开始,接口中新增了哪些方法?
默认方法:使用default修饰,使用实现类的对象调用。
静态方法:static修饰,必须用当前接口名调用
私有方法:private修饰,jdk9开始才有的,只能在接口内部被调用。
他们都会默认被public修饰。
2、JDK8开始,接口中为啥要新增这些方法?
增强了接口的能力,更便于项目的扩展和维护。


接口的注意事项

1、接口与接口可以多继承:一个接口可以同时继承多个接口[重点]。
2、一个接口继承多个接口,如果多个接口中存在方法签名冲突,则此时不支持多继承,也不支持多实现。
4、一个类继承了父类,又同时实现了接口,如果父类中和接口中有同名的默认方法,实现类会优先用父类的。
5、一个类实现了多个接口,如果多个接口中存在同名的默认方法,可以不冲突,这个类重写该方法即可。
网站建设,公众号小程序开发,多商户单商户小程序制作,高端系统定制开发,App软件开发联系我们【手机/微信:17817817816
微信扫码

网站建设,公众号小程序开发,商城小程序,系统定制开发,App软件开发等

粤ICP备2024252464号

在本版发帖
微信扫码
QQ客服返回顶部
快速回复 返回顶部 返回列表