-子类继承父类的共享方法,父类中的private方法不能被共享
--在同一个包中,protected修饰的方法也可以被继承,类成员如果不加任何修饰限定词,默认的是包访问权限,也可以继承这类方法。
--继承的一般规则是:将所有的数据成员设定为private,所有方法设定为public(一般规则)
package animal;
public class Animal {
private String name;
private String sex;
private int age;
public Animal(String name,String sex,int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void voice() {
System.out.println("I am an Animal so i can voice.");
}
@SuppressWarnings("unused")
private void make() {//私有
System.out.println("I can make.");
}
void say() {//默认
System.out.println("Hello");
}
protected void run() {
System.out.println("I can run.");
}
}
同一个包(package)0中
package animal;
public class Bird extends Animal{
public Bird(String name,String sex,int age) {
super(name,sex,age);
}
protected void run(String str) {
System.out.println("I can not only run but fly"+str);
}
public static void main(String []args) {
//new Animal("Angel","boy",1);
Bird b = new Bird("Angel","boy",1);
System.out.println(b.getName());
//b.make(); The method make() from the type Animal is not visible
b.say();//默认 可以
b.run();//protected 可以
//
}
}
Bird中可以重写Animal中方法,但是重写过程中方法名、参数类型、返回值、类型都不能改变;
参数类型、数目、顺序改变是重载,这时候Bird中(例如上面的run方法)存在两个run方法,一个是继承来的,一个是自己写的
在不同的包中;
package people;
import animal.Animal;
//同类》同包》子类》外部包
public class Woman {
//代理模式
Animal a = new Animal(null, null, 0);
public Woman() {
}
//默认修饰和protected修饰的方法在外部包中不能访问。protected外部包中的子类可以,默认(default)都不可以。
public void run() {
//a.run(); 编译报错:not visible 在其他包中,protected 修饰的方法不可见,同类、同包可以,子类、其他类不可以。
}
public void say() {
//a.say(); 编译报错
}
}
package people;
import animal.Animal;
public class Man extends Animal{
public Man(String name, String sex, int age) {
super(name, sex, age);
}
@Override
public String getName() {
// TODO Auto-generated method stub
return super.getName();
}
@Override
public void setName(String name) {
// TODO Auto-generated method stub
super.setName(name);
}
@Override
public String getSex() {
// TODO Auto-generated method stub
return super.getSex();
}
@Override
public void setSex(String sex) {
// TODO Auto-generated method stub
super.setSex(sex);
}
@Override
public int getAge() {
// TODO Auto-generated method stub
return super.getAge();
}
@Override
public void setAge(int age) {
// TODO Auto-generated method stub
super.setAge(age);
}
@Override
public void voice() {
// TODO Auto-generated method stub
super.voice();
}
@Override
protected void run() {
//private和默认修饰的不能
super.run();
}
}