java基础(4)

类与对象

  • 访问修饰符:
    default 就是没有显式标明访问修饰符的情况下
    在这里插入图片描述

  • 构造方法

    • 方法名与类名相同,无返回值。
    • 在实例化对象的时候,系统会自动调用无参构造,并给成员变量赋予初始值。如果定义了构造方法,则系统不会调用默认无参构造,而是会去寻找相匹配的构造方法并调用,如果不存在相匹配的构造方法,则会报错。
    • 对于子类对象的创建,会先调用父类默认无参构造,如果父类中定义了构造方法,子类中则需要使用super显示调用父类构造方法。
  • this 关键字

    • 只能调用本类的成员变量或成员方法(适当使用,以达到见名知意的效果)
    • 不能在静态方法中使用,也不能调用静态成员变量。静态成员变量是先对象存在的。
    • 只能在方法中使用
    • 可以使用this关键字,调用重载构造方法,但必须写在第一句。
  • static 关键字

    • 被static 修饰的方法和字段是先于对象存在的
    • 调用方式
      • 类名. 静态成员变量名/ 静态成员变量方法(当然访问修饰符不能是private的)
      • 对象名. 静态成员变量名 / 静态成员变量方法
    • 静态成员变量
      • 是属于类的,在装载类定义代码时,系统为静态成员变量分配独立的存储空间,所有属于这个类的对象对共享这个存储空间。
    • 静态成员方法
      • 在静态成员方法中不能调用非静态成员变量,理由还是那个静态成员方法是先于对象存在的,可以使用类名调用,而非静态成员变量需要对象被创建之后才可以被访问。
    • 静态代码块
      • 静态代码块在类被装载的时候执行,类只装载一次,所以静态代码块也只执行一次

      • 调用顺序:父类静态代码块 > 子类静态代码块 > 父类非静态代码块 > 父类构造方法 > 子类非静态代码块 > 子类构造方法。

      • 代码演示

        package com.company;
        
        import java.io.*;
        import java.util.Scanner;
        
        
        public class Test {
            public static void main(String[] args) throws IOException {
                Student student = new Student();
            }
        }
        
        class Person {
            int age;
            String name;
        
            static {
                System.out.println("调用了父类静态代码块");
            }
        
            {
                System.out.println("调用了父类非静态代码块");
            }
        
        
            public Person () {
                System.out.println("调用了父类构造方法");
            }
        
            public Person(int age, String name) {
                this.age = age;
                this.name = name;
            }
        }
        
        class Student extends Person {
            private static String sid;
        
            static {
                System.out.println("调用了子类静态代码块");
            }
        
            {
                System.out.println("调用了子类非静态代码块");
            }
        
            public Student() {
                System.out.println("调用了子类构造方法");
            }
        
            public Student(int age,String name,String sid) {
               super(age,name);
               this.sid = sid;
            }
        
            public static void show() {
                System.out.println("调用静态方法");
            }
        }
        

        结果演示 :
        在这里插入图片描述

继承和多态

  • 子类会继承除父类构造方法外的所有属性和方法

    • private 属性也会继承,只是无法使用
  • 子类重写父类方法 (方法重写 / 方法覆盖)

    • 原则:两同两小一大
      • 两同 : 方法名相同,参数类型相同。
      • 两小
        • 抛出异常小于等于父类抛出异常
        • 子类返回值类型小于等于父类方法返回值,必须是父类返回值的派生类 (但是返回值是基本数据类型还是要相等的)
      • 一大
        • 子类方法的访问权限应大于等于父类方法访问权限
  • 子类构造方法

    • 对于子类对象的创建,会先调用父类默认无参构造,如果父类中定义了有参构造方法,子类中则需要使用super显示调用父类构造方法。
  • super 关键字

    • 使用此关键字,表明调用的父类的方法。

    • 切记,只有使用了super关键字才是调用父类中的方法。

    • 出个题,代码演示

      package com.company;
      
      import java.io.*;
      import java.util.Scanner;
      
      
      public class Test {
         public static void main(String[] args) throws IOException {
             Student student = new Student();
             student.show();
         }
      }
      
      class Person {
         int age;
         String name;
      
         public void show() {
             showA();
         }
      
         public void showA() {
             System.out.println("父类中的A");
         }
      }
      
      class Student extends Person {
         private static String sid;
      
      
         public void show() {
             super.show();
         }
      
         public void showA() {
             System.out.println("子类中的A");
         }
      }
      

      结果显示:
      在这里插入图片描述

  • 继承

    • 一般父类使用默认访问权限,子类继承父类属性和方法,然后添加一个自己的属性。 同样子类在构造方法中调用父类构造方法,然后再初始化自己的属性。
  • 抽象类

    • 一个类被abstract 修饰
    • 可以有一般方法,也可以有成员变量,至少包含一个抽象方法。
    • 注意
      • 抽象类不能实例化对象
      • 子类继承抽象类,要么实现其抽象方法,要么也声明为抽象类
  • 接口

    • 默认访问修饰符是public
    • 接口的成员变量的访问修饰符默认是public static final
    • 接口的成员方法的访问修饰符默认是public abstract
    • 在导包之前可以有包定义 (刷题有碰到过这种题目)

资料参考:
方法重写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值