继承,修饰符

Posted cheng1994

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了继承,修饰符相关的知识,希望对你有一定的参考价值。

static静态修饰符

  一)、static可用来修饰

    1、成员变量:静态变量,可以直接通过类名访问

    2、成员方法:静态方法,可以直接通过类名访问

    3、代码块:静态代码,当java虚拟机加载类时,就会执行代码块

  二)、类的成员变量

    1、类变量(静态变量)

      A、被static修饰的变量

      B、在内存中只有一个拷贝

      C、类内部,可以在任何方法内直接访问静态变量

      D、其它类中,可直接通过类名访问

    2、实例变量

      A、没有被static修饰的变量

      B、每创一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响

    3、static方法

      A、静态方法:可直接通过类名访问

        a、静态方法中不能使用this和super

        b、不能直接访问所属类的实例变量和实例方法

        c、可直接访问类的静态变量和静态方法

      B、实使方法:通过实例访问

        可直接访问所属类的静态变量、静态方法、实例变量和实例方法

      C、静态方法必须被实现

  三)、代码块

    1、如果对象不创建,则普通代码块不能够被执行,当然,普通方法也无法调用;

    2、如果对象不创建,静态代码块依然能够被执行,而且,静态方法可直接通过类调用;

    3、说明,普通属性、方法、代码块是对象级别的;

      静态属性、方法、代码块是类级别的;

    PS:

      JVM加载静态代码块时,如果有多个静态代码块时,会按顺序执行,但静态代码码只会被执行一次

四、继承

  一)、继承是代码重用的一种方式:将子类共有的属性和行为放到父类中

    1、可以使用super关键字,super代表父类

    2、在子类构造 方法中调用且必须是第一句

    3、不可以访问父类中定义为private的属性和方法

    4、super关键字来访部父类的成员

  二)、子类继承父类的什么

    1、继承public和protected修饰的属性和方法,不管子类和父类是否在同一个包里

    2、不在同一个包中,父类中被默认权限修饰符的属性和方法无法被继承

       3、父类中被private修饰的成员、以及父类构造方法无法被继承

 

 

1、使用继承方法实现宠物店(狗、企鹅、猫)

 1 public class Pet {
 2     private String name;//名字
 3     private int health;//健康值
 4     private int macy;//亲密度
 5      
 6     public String getName() {
 7         return name;
 8     }
 9      
10     public void setName(String name) {
11         this.name = name;
12     }
13      
14     public int getHealth() {
15         return health;
16     }
17      
18     public void setHealth(int health) {
19         if(health>100||health<0) {
20             this.health = 60;
21             System.out.println("健康值在0到100之间,您的输入有误,默认60!");
22         }else {
23             this.health = health;
24         }
25     }
26      
27     public int getMacy() {
28         return macy;
29     }
30      
31     public void setMacy(int macy) {
32         if(macy>100||macy<0) {
33             this.macy = 60;
34             System.out.println("亲密度在0到100之间,您的输入有误,默认60!");
35         }else {
36             this.macy = macy;
37         }
38     }
39      
40     public void print() {
41         System.out.println("宠物的自白:");
42         System.out.println("我的名字是:"+this.name+",健康值是:"+this.health+",和主人的亲密度是:"+this.macy);
43     }
44      
45 }
 1 package com.java_1_18_lianxi;
 2  
 3 public class Dog extends Pet{
 4  
 5     private String strain; //品种
 6      
 7     public String getStrain() {
 8         return strain;
 9     }
10  
11     public void setStrain(String strain) {
12         this.strain = strain;
13     }
14  
15     public void print() {
16         super.print();
17         System.out.println("我是:"+this.strain);
18     }
19 }
 1 package com.java_1_18_lianxi;
 2  
 3 public class Penguin extends Pet {
 4  
 5     private String sex;//性别
 6      
 7     public String getSex() {
 8         return sex;
 9     }
10     public void setSex(int sex) {
11         if(sex==1) {
12             this.sex = "Q仔";
13         }else {
14             this.sex = "Q妹";
15         }  
16     }
17      
18     public void print() {
19         super.print();
20         System.out.println("我的性别是:"+this.sex);
21     }
22 }
package com.java_1_18_lianxi;
 
public class Cat extends Pet {
    private String colour;//颜色
 
    public String getColour() {
        return colour;
    }
 
    public void setColour(String colour) {
        this.colour = colour;
    }
 
    public void print() {
        super.print();
        System.out.println("我的毛色是:"+this.colour+"色!");
    }
}
 1 package com.java_1_18_lianxi;
 2  
 3 import java.util.Scanner;
 4  
 5 public class Test {
 6     public static void main(String[] args) {
 7         Scanner cxj = new Scanner(System.in);
 8         Penguin p = new Penguin();
 9         Dog d = new Dog();
10         Cat c = new Cat();
11         System.out.println("欢迎来到宠物店!");
12         System.out.print("请输入要领养宠物的名字:");
13         String name = cxj.next();
14         System.out.print("请输入您要领养宠的类型(1、狗   2、企鹅    3、猫):");
15         int select = cxj.nextInt();
16         switch(select) {
17         case 1:
18             d.setName(name);
19             System.out.print("请选择狗狗的健康值:");
20             d.setHealth(cxj.nextInt());
21             System.out.print("请输入狗狗的亲密度:");
22             d.setMacy(cxj.nextInt());
23             System.out.print("请输入狗狗的品种:");
24             d.setStrain(cxj.next());
25             d.print();
26             break;
27         case 2:
28             p.setName(name);
29             System.out.print("请选择企鹅的健康值:");
30             p.setHealth(cxj.nextInt());
31             System.out.print("请输入企鹅的亲密度:");
32             p.setMacy(cxj.nextInt());
33             System.out.print("请选择企鹅的性别(1、Q仔 2、Q妹):");
34             p.setSex(cxj.nextInt());
35             p.print();
36             break;
37         case 3:
38             c.setName(name);
39             System.out.print("请选择猫猫的健康值:");
40             c.setHealth(cxj.nextInt());
41             System.out.print("请输入猫猫的亲密度:");
42             c.setMacy(cxj.nextInt());
43             System.out.print("请选择猫猫的毛色:");
44             c.setColour(cxj.next());
45             c.print();
46             break;
47         default:
48             System.out.println("您的输入有误!"); 
49         }
50     }
51 }

 

以上是关于继承,修饰符的主要内容,如果未能解决你的问题,请参考以下文章

如何使用修饰符控制继承?

Java继承和访问修饰符

对protected修饰符的范围用代码说明(同时说明用protected修饰的属性,在继承时,一定程度上破坏了封装)

5staticfinal匿名对象内部类包修饰符代码块

C#中的默认访问修饰符

访问修饰符,封装,继承