30no2's Blog.

java学习——封装/继承/重写/多态

字数统计: 1.1k阅读时长: 4 min
2020/01/21 Share

一、封装

1、封装概念

  • 高内聚,低耦合
  • 禁止直接访问一个对象中数据的实际表示,而通过操作接口来访问,这称为隐藏信息
  • 属性私有,get/set

2、特点

  • 提高程序的安全性,保护数据
  • 隐藏代码的实现细节
  • 统一接口
  • 系统可维护性增加了

二、继承

1、基本概念

  • 继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模
  • extands的意思是扩展,子类是父类的扩展
  • Java类中只有单继承没有多继承
  • Java类所有的类都直接或者间接继承object
    • 继承是类和类之间的一种关系,除此之外类和类之间的关系还有依赖,组合,聚合等
    • 继承关系的两个类,一个为子类(派生类)一个为父类(基类),子类继承父类,使用关键字extends来表示
    • 子类和父类之间从意义上讲应该具有“is a”的关系

2、super

  • 子类默认调用父类的无参构造

    1
    super()
    • super() 必须在第一行
  • 调用父类的属性,方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public void test(String name){
    System.out.println(name);
    System.out.println(this.name);
    System.out.println(super.name);
    }
    public void test1(String name){
    say();
    this.say();
    super.say();
    }
  • 注意点

    • super调用父类的构造方法.必须在构造方法的第一个
    • super 必须只能出现在子类的方法或者构造方法中
    • super和 this不能同时调用构造方法!
  • super与this区别

    • 代表的对象不同
      • this:本身调用者这个对象
      • super:代表父类对象的应用
    • 前提
      • this:没有继承也可以使用
      • super:只能在维承条件才可以使用
    • 构造方法
      • this();本类的构造
      • super():父类的构造

三、重写

1、静态方法

  • 方法的调用和左边定义的类有关

2、非静态方法

  • 父类的引用指向子类,子类重写的父类的方法

3、重点:需要有继承关系,子类重写父类的方法

  • 方法名必须相同,方法体可以不同
  • 参数列表必须相同
  • 修饰符:子类范围可以扩大,不能缩写。public ->protected->default->private
  • 抛出异常:范围可以被缩小,不能扩大。
  • 重现原因:父类功能不能完全满足子类的需求

四、多态

1、定义:

  • 同一方法可以根据发送对象的不同而采用多种不同的行为方式
  • 一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多

2、注意事项

  • 多态是方法的多态,属性没有多态

  • 父类型和子类型转换要有联系,不能随意转换-》类型转换异常

  • 存在条件:要有继承关系,方法需要重写,父类引用指向子类对象!

    1
    Father f1 = new Son();
  • 不能重写的方法关键字

    • static 方法: 属于类,它不属于实例
    • final : 常量
    • private 方法

3、instanceof(类型转换)引用类型

1
2
3
4
5
Object o = new Student();
System.out.println(o instanceof Student);//true
System.out.println(o instanceof Person);//true
System.out.println(o instanceof Teacher);//false
System.out.println(o instanceof Object);//true

4、对象转换

  • 父类引用指向子类的对象
  • 把子类转换成父类,向上转型
  • 把父类转换子类,向下转型
  • 方法调用,减少重复的代码!

5、static

  • 静态方法,静态属性

    • 静态变量(类变量)

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      public class Student {
      private static int age;//静态变量
      private double score;//非静态变量

      public static void main(String[] args) {
      Student s1 = new Student();
      System.out.println(Student.age);
      //System.out.println(Student.score);//报错
      System.out.println(s1.age);
      System.out.println(s1.score);

      }
      }
  • 静态方法可以直接调用,非静态方法需要new之后调用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public class Student {
    private static int age;//静态变量
    private double score;//非静态变量

    public void run(){

    }
    public static void go(){

    }

    public static void main(String[] args) {
    Student s1 = new Student();
    (new Student()).run();
    go();

    }
    }
  • 静态代码块

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Person{
    // 匿名代码块
    // 实例化时运行
    {
    System.out.println("匿名代码块");
    }
    // 静态代码块
    // 创建person的时候只调用一次
    static{
    System.out.println("静态代码块");
    }

    }
    1
    2
    3
    4
    5
    6
    7
    8
    Person p1 = new Person();
    Person p2 = new Person();
    //输出
    /*
    静态代码块
    匿名代码块
    匿名代码块
    */
  • 静态导入包

    1
    2
    3
    4
    5
    6
    7
    import static java.lang.Math.random;
    public class Person {

    public void test(){
    System.out.println(random());
    }
    }
CATALOG
  1. 1. 一、封装
    1. 1.1. 1、封装概念
    2. 1.2. 2、特点
  2. 2. 二、继承
    1. 2.1. 1、基本概念
    2. 2.2. 2、super
  3. 3. 三、重写
    1. 3.1. 1、静态方法
    2. 3.2. 2、非静态方法
    3. 3.3. 3、重点:需要有继承关系,子类重写父类的方法
  4. 4. 四、多态
    1. 4.1. 1、定义:
    2. 4.2. 2、注意事项
    3. 4.3. 3、instanceof(类型转换)引用类型
    4. 4.4. 4、对象转换
    5. 4.5. 5、static