一、类的访问修饰符
1、public修饰符:公有访问级别
同包中可直接访问,不同包中导入类所在的包即可访问
同包中:
不同包中:
2、默认修饰符:包级私有访问级别
同包中:
不同包中:
二、类成员访问修饰符及作用域
1、private:只能在同一个类中访问
2、默认修饰符:同一类或同一个包中可以访问,同一包中的子类也可以访问
不同包无法访问:
在同一个包的子类可以访问:
不同包中的子类无法访问:
3、protected:在同一类或同一包中以及同一包中的子类可以访问
同一包中的子类:
不同包中的子类无法访问:
4、public:任何地方都可以进行访问
三、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、使用继承方法实现宠物店(狗、企鹅、猫)
宠物类:
package com.java_1_18_lianxi;
public class Pet {
private String name;//名字
private int health;//健康值
private int macy;//亲密度
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
if(health>100||health<0) {
this.health = 60;
System.out.println("健康值在0到100之间,您的输入有误,默认60!");
}else {
this.health = health;
}
}
public int getMacy() {
return macy;
}
public void setMacy(int macy) {
if(macy>100||macy<0) {
this.macy = 60;
System.out.println("亲密度在0到100之间,您的输入有误,默认60!");
}else {
this.macy = macy;
}
}
public void print() {
System.out.println("宠物的自白:");
System.out.println("我的名字是:"+this.name+",健康值是:"+this.health+",和主人的亲密度是:"+this.macy);
}
}
狗类:
package com.java_1_18_lianxi;
public class Dog extends Pet{
private String strain; //品种
public String getStrain() {
return strain;
}
public void setStrain(String strain) {
this.strain = strain;
}
public void print() {
super.print();
System.out.println("我是:"+this.strain);
}
}
企鹅类:
package com.java_1_18_lianxi;
public class Penguin extends Pet {
private String sex;//性别
public String getSex() {
return sex;
}
public void setSex(int sex) {
if(sex==1) {
this.sex = "Q仔";
}else {
this.sex = "Q妹";
}
}
public void print() {
super.print();
System.out.println("我的性别是:"+this.sex);
}
}
猫类:
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+"色!");
}
}
主程序:
package com.java_1_18_lianxi;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner cxj = new Scanner(System.in);
Penguin p = new Penguin();
Dog d = new Dog();
Cat c = new Cat();
System.out.println("欢迎来到宠物店!");
System.out.print("请输入要领养宠物的名字:");
String name = cxj.next();
System.out.print("请输入您要领养宠的类型(1、狗 2、企鹅 3、猫):");
int select = cxj.nextInt();
switch(select) {
case 1:
d.setName(name);
System.out.print("请选择狗狗的健康值:");
d.setHealth(cxj.nextInt());
System.out.print("请输入狗狗的亲密度:");
d.setMacy(cxj.nextInt());
System.out.print("请输入狗狗的品种:");
d.setStrain(cxj.next());
d.print();
break;
case 2:
p.setName(name);
System.out.print("请选择企鹅的健康值:");
p.setHealth(cxj.nextInt());
System.out.print("请输入企鹅的亲密度:");
p.setMacy(cxj.nextInt());
System.out.print("请选择企鹅的性别(1、Q仔 2、Q妹):");
p.setSex(cxj.nextInt());
p.print();
break;
case 3:
c.setName(name);
System.out.print("请选择猫猫的健康值:");
c.setHealth(cxj.nextInt());
System.out.print("请输入猫猫的亲密度:");
c.setMacy(cxj.nextInt());
System.out.print("请选择猫猫的毛色:");
c.setColour(cxj.next());
c.print();
break;
default:
System.out.println("您的输入有误!");
}
}
}
结果: