java中的访问修饰符
访问修饰符 | 本类 | 本类其他类(子类) | 其他类 | 其他包子类 |
---|---|---|---|---|
public 公共的 | √ | √ | √ | √ |
– | – | – | – | – |
private 私有的 | √ | × | × | × |
– | – | – | – | – |
default 缺省的 默认的 | √ | √ | × | × |
– | – | – | – | – |
protected | √ | √ | × | √ |
多态
一种类型 多种形态 对象在创建时是父形态 在使用时是子形态
多态在程序设计中 为程序提供了【可插拔性】
你要记得 子类赋值给父类 是自动类型转换 向上转型
你要记得 父类强制转换成子类 需要加子类类型符号 向下转型
多态 形成的必要因素
1:必须有继承关系
2:子类中需要有方法的重写
关键字 instanceof :是否包含子类对象
package pm;
/**
* 宠物父类
*/
public class Pet {
private String name;
private int age;
private int health;
private int love;
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;
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
this.health = health;
}
public int getLove() {
return love;
}
public void setLove(int love) {
this.love = love;
}
public Pet(){
}
public Pet(String name, int age, int health, int love) {
super();
this.name = name;
this.age = age;
this.health = health;
this.love = love;
}
public void eat(){
}
}
//企鹅类
public class penguin extends Pet{
// 特殊属性
private String sex;
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Penguin() {
super();
}
public Penguin(String name, int age, int health, int love, String sex) {
super(name, age, health, love);
this.sex = sex;
}
//重写自Object中的方法
public String toString(){
return"宠物名"+getName()+"\t宠物年龄:"+
getAge()+"\t健康值"+getHealth()+"\t亲密度:"+getLove()+"\t性别:"+sex;
}
//重写自父类的方法
public void eat() {
System.out.println("我是企鹅,我吃鱼");
setHealth(getHealth()+1);
}
//子类独有的方法
public void swimming(){
System.out.println("我是企鹅,我要游泳,嘎嘎");
setLove(getLove()+1);
setHealth(getHealth()-5);
}
}
public static void main (String[] args){
//多态 一种类型 多种形态
Pet pet = new Penguin("qq",2,85,50,"雌性");
//你记得 子类赋值给父类自动类型转换 向上转型
pet = new Dog("大黄",3,75,85,"黄色");//这里的Dog和企鹅定义的一样
//你要记得 子类赋值给父类 自动类型转换 向上转型
pet.eat();
if(pet instanceof Penguin){
Penguin pen = (Penguin)pet;// 你记得,父类强制转换成子类,需要加子类类型符号,向下转型。
pen.swimming();
}else if(pet instanceof Dog){
Dog dog2 = (Dog)pet;
dog2.feipan();
}
}