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的构造器
    */
    
  • 相关阅读:
    C#生成静态两方法
    ASP.NET C# 生成静态页面简单方法
    sql日期格式化
    Div+Css+JS做多个显示/隐藏内容块
    Request获取url各种信息的方法
    asp.net遍历页面所有的按钮(或控件)
    Donews.com:SpyMac.com也提供了1G的Email.
    再见 Swagger UI!国人开源了一款超好用的 API 文档生成框架,Star 4.7K+,真香!!
    面试官:new Object[5] 一共创建了几个对象?
    面试官:select......for update 会锁表还是锁行?别答错了!
  • 原文地址:https://www.cnblogs.com/huyuqing/p/14318057.html
Copyright © 2011-2022 走看看