java基础day14---static关键字-----继承

day14
1.为什么使用static关键字修饰属性

/*
编写学生类,属性:名字,现住址(北京)
*/
class Student{
//构造方法
    public Student(){
    
    }
    public Student(String name){
        this.name=name;
    }
    //属性
    String name;
    String address="北京";
}
//编写学生测试类
class StudentTest{
    public static void main(String[] args){
    //创建对象
    Student s=new Student();
    Student s2=new Student("张三");

    System.out.println(Student.address);//北京
    Student s=new Student();
    System.out.println(s.name);//null
    System.out.println(s.address);//北京

    s=null;//变为空值,对象变为垃圾
    //System.out.println(s.name);//出现运行错误,不能访问对象中的实例变量
    System.out.println(s.address);

    }
}

 


//发现问题:
---多个对象中有相同值得属性,如:address="北京";
-----能否将相值得属性,在内存中只开辟一块空间,
    并且所有对象都可以访问?---能
解决办法:
--将相同值得属性,存放在一个共享区(方法区)中,此时
    多个对象都可以访问。
    堆--栈---共享区---堆--栈
---好处:节省空间
---static String address="北京";///称为静态属性也叫做类的变量
---在方法区(共享区)中存储,并且所有对象都可以访问
---与类同生死,也就是说类在static修饰的属性就存在
---可以使用类名.属性名称;也可以使用引用名称.属性名称
---注意:当引用名称的值为null时,也可以访问静态属性,
    不会出现空指针异常
---类优先于对象,也就是说类的生命周期比较长

2.static关键字修饰符方法
---称为静态方法也叫做类的方法
---与类同生死,也就是说类在static修饰的属性就存在
---可以使用类名。方法名称([参数列表]);
    也可以使用引用名称.方法名称([参数列表]);

 

class Student{
    //称为静态方法也叫做类的方法
    public static void print(){
        System.out.println("执行了println方法");
        //System.out.println(name);//静态方法中只能访问静态属性,静态方法
    }
    //称为非静态方法也叫做实例方法
    public void show(){
        System.out.println("执行了show方法");
    }


    public Student(){
    
    }
    public Student(String name){
        this.name=name;
    }
    //属性
    String name;
    String address="北京";
 }

 //编写学生测试类
class StudentTest{
    public static void main(String[] args){
    Student.print();
    Student s=new Student();
    System.out.println(s.name);;//null
    s.show();
    s.print();
    

    }
}

 



3.static修饰代码块
--- 主要完成对静态属性赋值
---静态代码块在类第一次被载入时则执行

class Student{
    //静态属性代码块:完成对静态属性赋值
    static{
        address="北京市";
        System.out.println("执行了静态代码块");
    }
}

 



4.为什么使用继承
/*
编写狗类:属性--名字、年龄、品种、颜色;方法:显示信息
编写猫类:属性--名字、颜色、性别、年龄;方法:显示信息
编写测试类:创建猫和狗的对象,并分别显示信息

分析得到:
    如果多个类中有相同的属性和方法,能否单独编写一个类?----能
解决办法:
    --将多个类中相同的属性和方法编写在单独一个类中,该类称为父类
    --在子类继承父类,然后在子类中编写独有的属性和方法

    动物类:
        属性:名字、年龄、颜色
        方法:显示信息
    狗类 继承 动物类
        独有属性:品种              
    猫类 继承 动物类
        独有属性:性别

好处;减少代码的冗余性(重复性)
*/
5.编写继承代码步骤
---第一步:编写父类
    [修饰符] class 类名{
        //属性和方法
    }
---第二步:编写子类
    [修饰符] class 子类类名 extends 父类类名{
    //编写独有属性和方法
    }

---注意:当一个类没有指明继承具体哪个父类时,
则默认继承object类
    object类是所有类的父类(超类)


6.继承中注意事项
--子类继承父类,但是不能继承父类的构造方法
--父类也叫做超类(基类),子类也叫做派生类
--继承具有两大特性:
    **一个类只能继承一个直接的父类,也就是类的单根性
    **类具有传递性


class Animal{
    //属性
    String name;
    int age;
    String color;
    //方法:显示信息
    public void show(){
        System.out.println("名字:"+name+"\n年龄:"+age+"\n颜色:"+color);
    }
}
//编写狗的子类继承动物父类
class Dog extends Animal{
    //编写子类中独有属性和方法
    String strain;

}
//等价于
/*class Dog extends object{

}*/

class Cat extends Animal{
    //独有属性:性别
    char sex;
}

 





posted @ 2019-04-05 18:58  小白咚  阅读(196)  评论(0编辑  收藏  举报