Java 代码块与继承全攻略

代码块

代码块 分类 :

1.局部代码块:限制变量的作用域 生命周期
书写位置 在方法中
2. 构造代码块(在开发中很少使用)
书写位置:在类中方法外
调用时机:如果你有构造代码块 系统会帮你调用 帮你在创建对象之前调用 每次创建对象都会调用
3. 静态代码块(被Static 修饰的)
静态代码块依赖类 随着类的加载而加载
注意:只加载一次(系统只调用一次 不管创建多少对象)
应用场景:加载驱动(数据库 JDBC)
4. 同步代码块(多线程)

代码举例:

public class Demo01 {
    public static void main(String[] args) {
        /*{
            System.out.println("我是局部代码块");
            }   */
        Person person = new Person();
        person.setAge(15);
        person.setName("james");
        person.sayHi();     
        Person person1 = new Person("Tom", 12);
        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.让类与类之间产生关联(产生父子关系)
3.继承使用的关键字 : extends

注意:1.继承时可以把多个类中相同的功能或方法 抽取出来
         抽象构造一个类出来 把这些类建立继承关系
     2.建立继承关系的同时 一定要符合逻辑(切记不要为了继承而继承)
       如果是继承关系 一定符合 什么是什么  
     3.java只允许单继承(多继承可以使用接口间接实现)
     4.java 中允许多层继承(爷爷 父亲 儿子 孙子 ...)
     5.java中最顶层的父类(最基础) Object类
     6.如果这个类没有写继承哪个父类 默认继承Object类 
     7.如果使用共有方法或者类 可以当前继承中创建最顶端的类来使用
     8.如果要使用特殊的方法 就创建当前继承中最末端的类来使用
     9.构造方法不能被继承 为了保障继承的完整性 在你创建子类对象的
 时候  如果不调用 父类的构造方法 系统会帮你调用 父类无参构造方法

super 关键字

代表是父类的对象 super 调用方法 super.方法(); super();调用父类构造方法 this(); 调用本类构造方法

代码举例:

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

    class TestA{
        int num1 = 10;
        int num2 = 20;
        //无参构造方法注释
        //  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 = 30;  

        // 子类的构造方法中 如果你什么都不写 会默认调父类无参构造
            //如果父类 没有无参的构造方法 就证明 父类当中一定有有参方法
            //无论有参 还是无参 子类的构造方法中必须调用一个
            //如果没有调用无参的, 必须要手动调用一个有参构造方法
        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 的区别
1.重写 前提需要继承关系
重载 在同一个类里
2.重写 需要方法的声明完全一致
重载 只跟参数有关

@Override
            public String toString() {
                // TODO Auto-generated method stub
                return super.toString();
            }

你可能感兴趣的:(java)