zoukankan      html  css  js  c++  java
  • 方法重载、方法重写、四种权限修饰、JavaBean、代码块

    方法重载(overload)

    • 一个类中可以含有多个重名的方法。
      两同一不同
      ①同一个类
      ②同一个方法名
      ③不同参数列表:参数个数不同,参数类型不同

    方法重写(override)

    • ①子类重写的方法的修饰符大于等于 父类的权限修饰符
    • ②子类不能重写父类中private的修饰符
    • ③父类的被重写的方法的返回值类型是void,则子类重写的父类中方法的返回值类型是void,
      父类的被重写的方法的返回值类型是A,则子类重写的方法返回值类型是A或A的子类
      父类的被重写的方法的返回值类型是基本类型,则子类重写的方法的返回值类型是 相同的基本类型。
    • ④子类重写的方法抛出的异常必须小于等于父类被重写的异常
    • ⑤父类被重写的方法需要是 非静态的方法,这时可以考虑重写。

    四种权限修饰

    修饰符 类内部 同一个包 不同包子类 同一个工程
    private
    (缺省)
    protected
    public
    对于class类只能用public和缺省来修饰

    javaBean

    • javaBean: 类是公共的、有一个无参的公共的构造器、有属性,且有对应的set和get方法。

    代码块

    • 静态代码块:
      ①随着类的加载而执行,且只执行一次
      ②静态代码块可以定义多个,且按照声明的先后顺序执行
      ③静态代码块内只能调用静态属性、方法
    • 非静态代码块
      ①随着对象的创建而执行,创建一个对象,执行一次
      ②非静态代码块可以定义多个,且按照声明的先后顺序执行
      ③非静态代码块可以调用静态和非静态属性和方法
      没有继承的初始化顺序


      有继承的初始化顺序

    class Person{
        String name;
        int age;
        static String dec;
         
        public Person(){
        }
    
        public Person(String name, int age){
          this.name = name;
          this.age = age;
        }
        
        //静态代码块
        static{
          System.out.println("静态代码块");
        }
          
        //非静态代码块
        {
          System.out.println("非静态代码块");
        }
    
        public void info1(){
          System.out.println("info1");
        }
    
        public static void info2(){
          System.out.println("info2");
        }
    }
    
    /** 测试
    Test1
      Person.dec = "abc";   
        则结果输出:静态代码块
    
    Test2
      Person person = new Person(); 
      则结果输出:
        静态代码块
        非静态代码块
    
    Test3
    
      Person person = new Person();
      Person person2 = new Person();
      输出结果:
          静态代码块
          非静态代码块
          非静态代码块
    */
    

    练习一

    package com.hyq;
    
    public class Test {
        public static void main(String[] args) {
            new Leaf();
            System.out.println();
            //new Leaf();
        }
    }
    
    class Root{
        static {
            System.out.println("Root的静态代码块");
        }
        {
            System.out.println("Root的非静态代码块");
        }
        public Root(){
            System.out.println("Root的无参构造器");
        }
    }
    class Mid extends Root{
        static {
            System.out.println("Mid的静态代码块");
        }
        {
            System.out.println("Mid的非静态代码块");
        }
        public Mid(){
            System.out.println("Mid的无参构造器");
        }
        public Mid(String msg){
            this();
            System.out.println("Mid的有参构造器,参数="+msg);
        }
    }
    class Leaf extends Mid{
        static {
            System.out.println("Leaf的静态代码块");
        }
        {
            System.out.println("Leaf的非静态代码块");
        }
        public Leaf(){
            super("啦啦啦");
            System.out.println("Leaf的构造器");
        }
    }
    
    //super没有显式写明的话,默认调用的是无参构造器。
    /** 一个new Leaf()的输出结果:
    Root的静态代码块
    Mid的静态代码块
    Leaf的静态代码块
    Root的非静态代码块
    Root的无参构造器
    Mid的非静态代码块
    Mid的无参构造器
    Mid的有参构造器,参数=啦啦啦
    Leaf的非静态代码块
    Leaf的构造器
    */
    
    /** 2个new Leaf()的输出结果:
    Root的静态代码块
    Mid的静态代码块
    Leaf的静态代码块
    Root的非静态代码块
    Root的无参构造器
    Mid的非静态代码块
    Mid的无参构造器
    Mid的有参构造器,参数=啦啦啦
    Leaf的非静态代码块
    Leaf的构造器
    
    Root的非静态代码块
    Root的无参构造器
    Mid的非静态代码块
    Mid的无参构造器
    Mid的有参构造器,参数=啦啦啦
    Leaf的非静态代码块
    Leaf的构造器
    */
    
  • 相关阅读:
    每日总结2021.9.14
    jar包下载mvn
    每日总结EL表达语言 JSTL标签
    每日学习总结之数据中台概述
    Server Tomcat v9.0 Server at localhost failed to start
    Server Tomcat v9.0 Server at localhost failed to start(2)
    链表 java
    MVC 中用JS跳转窗体Window.Location.href
    Oracle 关键字
    MVC 配置路由 反复走控制其中的action (int?)
  • 原文地址:https://www.cnblogs.com/huyuqing/p/14318057.html
Copyright © 2011-2022 走看看