java继承与代码块

java继承与代码块

一.继承

1.继承特点:
 1.减少你的代码量
 2.让类与类之间产生关联
2.注意:
 1.继承时 可把多个类中 相同的功能或方法 抽取出来 重新构造一个类出来 把这些类 建立继承关系
 2.建立继承关系的同时 一定要符合逻辑(切记不要为了继承而继承)
 3.继承的关系一定要符合 子类是父类
3.继承写法:
class 子类 extends 父类
4.java 中的继承
注意:
 1.java 只允许 单继承(多继承可以使用接口来间接实现)
 2.java 中允许 多层继承
 java中 最顶层的父类(最基础类) Object类
 如果我这个类 没有写 继承那个父类 默认就是继承Object类

例子如下:
/*
 * 猫类
 * 姓名 颜色 种类 会抓老鼠
 * 狗类 
 * 姓名 颜色 种类 会啃骨头
 * 
 * 
*/
  // 抽取出相同的部分 组成动物类
class Animal{
    String name;
    String colour;
    String kind;

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


class Cat extends Animal{

    //抓老鼠
    public void hitMouse() {
        System.out.println("抓老鼠");
    }

}

class Dog extends Animal{

    //啃骨头
    public void eat() {
        System.out.println("啃骨头");
    }

}

二.代码块

1.代码块分类:
 1.局部代码块:限制变量的作用域
    书写位置:在方法中
 2.构造代码块(在开发中 很少使用)
    书写位置:在类中方法外
   调用时机:如果你有构造代码块 系统会帮你调用 帮你在创建对象之前调用 每次创建对象都会调用
 3.静态代码块(一定是被static修饰)
    静态代码块 依赖类 随着类的加载而加载
   注意:只加载一次(系统只调用一次 不管你创建多少对象)
   应用场景:u盘 装载驱动程序  
            加载驱动(数据库驱动 JDBC) 
 4.同步代码块(多线程)
例子如下:
/*
 * 人名 年龄
 * set/get 有参无参构造 介绍自己的方法
 */
class Person{
    private String name;
    private int age;

    static{
        System.out.println("我是Person类静态代码块");
    }
    {
        //比如 我每个对象 都会调用同一个方法 这时可以使用
        this.sleep();
        System.out.println("我是构造代码块");
    }
    //构造方法
    public Person(){
        System.out.println("我是无参数的构造方法");
    }
    public Person(String name,int age) {
        this.name = name;
        this.age = age;
        System.out.println("我是有参的构造方法");
    }
    // set/get方法 
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    //介绍
    public void sayHi() {
        System.out.println(name + " " + age);
    }

    //睡觉
    public void sleep() {
        System.out.println("在睡觉");
    }
}

三.继承,构造方法与set/get方法实例

package com.lanou3g;

import java.util.Set;
    /*
    编写 
    猫类
    名字 毛色 腿数 猫眼的类型 猫叫喵喵喵
    狗类
    名字 毛色 腿数  狗叫汪汪汪
    要求:使用继承 无参 有参构造方法 set/get方法 介绍自己的方法
    */
public class Demo09 {
    public static void main(String[] args) {
        //创建对象测试
        Cat1 cat = new Cat1();
        cat.setColour("白色");
        cat.setLeg(4);
        cat.setName("猫");
        cat.setEyes("灰色眼睛");
        Dog1 dog = new Dog1("狗", "黑色",4);
        System.out.println(cat);
        System.out.println(dog);
    }
}
class Animal1 {
    private String name;
    private String colour;
    private int leg;
    //无参
    public Animal1() {

    }
    //有参
    public Animal1(String name, String colour,int leg) {
        this.name = name;
        this.colour = colour;
        this.leg = leg;
    }
    // set/get方法
    public String getName() {
        return name;
    }
    public String getColour() {
        return colour;
    }
    public int getLeg() {
        return leg;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setColour(String colour) {
        this.colour = colour;
    }
    public void setLeg(int leg) {
        this.leg = leg;
    }
    //to String 方法
    @Override
    public String toString() {
        return leg + "只腿的" + colour + name ;
    }
}
class Cat1 extends Animal1{
    //特有属性
    private String eyes;
    public String getEyes() {
        return eyes;
    }
    public void setEyes(String eyes) {
        //特有属性 直接赋值就行
        this.eyes = eyes;
    }
    public Cat1() {

    }
    public Cat1(String name,String colour,int leg,String eyes) {
        //直接调用父类的 构造方法 完成初始化
        //为了保证继承的完整性 在子类构造方法中 第一行 必须调用父类的构造方法(无参有参都行)
    super(name,colour,leg);
    this.eyes = eyes;
    }
    public void cry() {
        System.out.println("猫叫喵喵喵");
    }
    @Override
    public String toString() {
        //可以在父类的基础上 添加自己特有的属性去打印
        return super.toString() + " " + eyes;
    }
}
class Dog1 extends Animal1{
    public Dog1() {

    }
    public Dog1(String name,String colour,int leg) {
        super(name, colour, leg);
    }
    public void cry() {
        System.out.println("狗叫汪汪汪");
    }
    @Override
    public String toString() {
        return super.toString();
    }
}

你可能感兴趣的:(java,继承,java)