天天看点

杰神之Java代码块和方法的继承(方法重载和方法重写)Java代码块和方法的继承(方法重载和方法重写)

Java代码块和方法的继承(方法重载和方法重写)

代码块

代码块分类:

* 1.局部代码块(限制变量的作用域)

书写位置:方法中

* 2.构造代码块(在开发中很少使用)

书写位置:在类中方法外

调用时机:如果你有构造代码块,系统会帮你调用

帮你在创建对象之前调用 每次创建对象都会调用

* 3.静态代码块(一定是被static修饰的)

静态代码块依赖类 随着类的加载而加载

注意:加载一次(不管你创建多少对象,系统只调用一次)

应用场景:加载驱动(U盘装载驱动程序 JDBC数据库驱动)

* 4.同步代码块(多线程)

public class Demo01 {
    public static void main(String[] args) {
        /*{
            System.out.println("我是局部代码块");
            }   */
        Person person = new Person();
        person.setAge();
        person.setName("james");
        person.sayHi();     
        Person person1 = new Person("Tom", );
        person1.sayHi();        
    }
}
    // 人名 年龄 有参无参 构造 sayHi
    class Person{
        private String name;    
        private int age;    
        //构造代码块
        {   
            // 每个对象都会调用同一样的方法 可以使用代码块
            System.out.println("哈哈");
        }
        static{
            System.out.println("我是静态代码块");
        }       
        // 有参无参构造方法
        public Person() {
            System.out.println("我是无参的构造方法");
        }

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
            System.out.println("我是有参的构造方法");
        }
        // get/set方法
        public String getName() {
            return name;
        }

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

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }
        //  sayHI方法
        public void sayHi() {
            System.out.println(name + " " +age);
        }

        public void sleep() {
            System.out.println("睡觉 就是爽");       
        }
    }
           

继承

  • 特点:

    1.减少代码量

    2.让类与类之间产生关联(父子)

  • 继承使用的关键字:extends
  • 注意:

    1.继承时可以把多个类中相同的功能或方法抽取出来,

    重新构造一个类出来 把这些类 建立继承关系

    2.建立继承关系的同时 一定要符合逻辑(切记不要为了继承而继承)

    3.java只允许单继承(多继承可以使用接口间接实现)

    4.java 中允许多层继承(爷爷 父亲 儿子 孙子 …)

    5.java中最顶层的父类(最基础) Object类

    6.如果这个类没有写继承哪个父类 默认继承Object类

    7.如果使用共有方法或者类 可以当前继承中创建最顶端的类来使用

    8.如果要使用特殊的方法 就创建当前继承中最末端的类来使用

    9.构造方法不能被继承,为了保障继承的完整性,在你创建子类对象的

    时候 ,如果不调用父类的构造方法,系统会帮你调用父类无参构造方法

super 关键字

super代表是父类的对象

super 调用方法

* 调用对象 super点对象

* 调方法 super点方法()

public class Demo05 {
    public static void main(String[] args) {
        TestB testB = new TestB();
        testB.fun();
    }
}

    class TestA{
        int num1 = ;
        int num2 = ;
        //无参构造方法注释
        //  public TestA() {
    //  }

        public TestA(int num1, int num2) {
            super();
            this.num1 = num1;
            this.num2 = num2;
        }
        public void sayHi() {
            System.out.println("jaja");
        }
    }
    //继承TestA类
    class TestB extends TestA{
        int num1 = ;  

        // 子类的构造方法中 如果你什么都不写 会默认调父类无参构造
            //如果父类 没有无参的构造方法 就证明 父类当中一定有有参方法
            //无论有参 还是无参 子类的构造方法中必须调用一个
            //如果没有调用无参的, 必须要手动调用一个有参构造方法
        public TestB(int num1, int num2) {
            super(num1, num2);
        }
        public void fun() {
            //使用this 时 会现在本类中寻找该属性 没找到 就去父类中找
            System.out.println(this.num1 + " " + this.num2);
            System.out.println(super.num1);
        //  this.sayHi();
        //  super 调用方法  super.方法();  super();调用父类构造方法  this(); 调用本类构造方法
        //  super.sayHi();
        }
    }
           

方法重写和方法重载的区别

  • 方法重写

    注意:方法声明完全一致的时候,叫方法的重写

    方法的重写建立在类与类之间有继承关系

    • 方法重载

      实现相同的功能,但是函数的内部实现不同。函数的重载是函数名字相同,并且只跟参数有关(参数的类型 参数的顺序 参数的个数有关),跟参数的返回值和参数名无关。

* Override(重写)和Overload(重载)的区别
 * .重写前提:需要继承关系
 *   重载前提:同一个类里
 * .重写需要方法声明完全一致
 *   重载只跟参数有关