先贴一张菜鸟教程的图
访问一个类的方法有两种方式:1.调用类里方法,不需要对象 2.调用类外方法,需要new一个该方法的类的对象
有点感觉后继续往下看,
情况:老爸有五百万;儿子继承老爸,包内;外甥不继承老爸,包内;干儿子继承老爸,包外;路人不继承老爸,包外。
public:老爸无私奉献,儿子,外甥,干儿子,路人统统可以拿他的钱
package a;
public class Father {
private String money = "五百万";
//public方法
public void getMoney() {
System.out.println(money);
}
void f1(){
//老爸拿自己的钱,类里调用
getMoney();
}
}
//-----------------------------
package a;
class Son extends Father {
void f2() {
Father father=new Father();
//编译通过
father.getMoney();
}
}
//-----------------------------
package a;
class Nephew {
void f3(){
Father father=new Father();
//编译通过
father.getMoney();
}
}
//-----------------------------
package b;
import a.Father;
class AdoptedSon extends Father {
void f4() {
Father father=new Father();
//编译通过
father.getMoney();
}
}
//-----------------------------
package b;
import a.Father;
class Passerby {
void f5(){
Father father=new Father();
//编译通过
father.getMoney();
}
}
deault:老爸只给包内的儿子,外甥拿钱,干儿子,路人没门
package a;
public class Father {
private String money = "五百万";
//default方法
void getMoney() {
System.out.println(money);
}
void f(){
//老爸拿自己的钱,类里调用
getMoney();
}
}
//-----------------------------
package a;
class Son extends Father {
void f() {
Father father=new Father();
//编译通过
father.getMoney();
}
}
//-----------------------------
package a;
class Nephew {
void f(){
Father father=new Father();
//编译通过
father.getMoney();
}
}
//-----------------------------
package b;
import a.Father;
class AdoptedSon extends Father {
void f() {
Father father=new Father();
//编译失败
father.getMoney();
}
}
//-----------------------------
package b;
import a.Father;
class Passerby {
void f(){
Father father=new Father();
//编译失败
father.getMoney();
}
}
private:老爸抠门,儿子,外甥,干儿子,路人统统不可以拿他的钱
package a;
public class Father {
private String money = "五百万";
//private方法
private void getMoney() {
System.out.println(money);
}
void f(){
//老爸拿自己的钱,类里调用,这回只有自己能拿了
getMoney();
}
}
//-----------------------------
package a;
class Son extends Father {
void f() {
Father father=new Father();
//编译失败
father.getMoney();
}
}
//-----------------------------
package a;
class Nephew {
void f(){
Father father=new Father();
//编译失败
father.getMoney();
}
}
//-----------------------------
package b;
import a.Father;
class AdoptedSon extends Father {
void f() {
Father father=new Father();
//编译失败
father.getMoney();
}
}
//-----------------------------
package b;
import a.Father;
class Passerby {
void f(){
Father father=new Father();
//编译失败
father.getMoney();
}
}
protected:最特殊就是这个,老爸允许儿子,外甥拿钱,干儿子只能用一种特殊方式拿到钱(请看回上面的表),路人不可以拿钱
package a;
public class Father {
private String money = "五百万";
//protected方法
protected void getMoney() {
System.out.println(money);
}
void f(){
//老爸拿自己的钱,类里调用
getMoney();
}
}
//-----------------------------
package a;
class Son extends Father {
void f() {
Father father=new Father();
//编译通过
father.getMoney();
}
}
//-----------------------------
package a;
class Nephew {
void f(){
Father father=new Father();
//编译通过
father.getMoney();
}
}
//-----------------------------
package b;
import a.Father;
class AdoptedSon extends Father {
void f() {
Father father=new Father();
//编译失败
father.getMoney();
//注意这里!
//这种特殊方式就是:干儿子已经继承老爸的getMoney(),new自己一个对象来调用该方法
AdoptedSon adoptedSon=new AdoptedSon();
//编译通过
adoptedSon.getMoney();
}
}
//-----------------------------
package b;
import a.Father;
class Passerby {
void f(){
Father father=new Father();
//编译失败
father.getMoney();
}
}