代码1:
package com.chem;
class A{
private void fun(){
System.out.println("******A类方法******");
}}
class B extends A{
void fun(){
System.out.println("******B类方法******");
}
}
public class ExtendsDemo01 {
public static void main(String[] args){
B b=new B();
b.fun();
}
}
代码2:
package com.chem;
class A{
private void fun(){
System.out.println("******A类方法******");
}
public void print(){
this.fun();
}
}
class B extends A{
void fun(){
System.out.println("******B类方法******");
}
}
public class ExtendsDemo01 {
public static void main(String[] args){
B b=new B();
b.print();
}
}
代码1的输出结果:******B类方法******
代码2的输出结果:******A类方法******
代码2的输出结果为什么是A 有点弄不明白?求指导!
package com.chem;
class A{
private void fun(){
System.out.println("******A类方法******");
}}
class B extends A{
void fun(){
System.out.println("******B类方法******");
}
}
public class ExtendsDemo01 {
public static void main(String[] args){
B b=new B();
b.fun();
}
}
代码2:
package com.chem;
class A{
private void fun(){
System.out.println("******A类方法******");
}
public void print(){
this.fun();
}
}
class B extends A{
void fun(){
System.out.println("******B类方法******");
}
}
public class ExtendsDemo01 {
public static void main(String[] args){
B b=new B();
b.print();
}
}
代码1的输出结果:******B类方法******
代码2的输出结果:******A类方法******
代码2的输出结果为什么是A 有点弄不明白?求指导!
public void fun() {
System.out.println("******A类方法******");
} public void print() {
fun();
}
}class B extends A {
public void fun() {
System.out.println("******B类方法******");
}
}
在创建B的时候会同时创建A对象,this就是在创建B之前创建的A对象,用的这个A对象调用的A的私有fun
谢谢1楼 你说的我明白 但是不是我想问的
#2
你能在说具体一点么?视频上说的是 代码2:B中的 fun()是新方法 但是我没明白
private void fun() {
System.out.println("******A类方法******");
}
}class B extends A {
public void fun() {
System.out.println("******B类方法******");
}
public void print() {
this.fun();
}
}public class ExtendsDemo01 {
public static void main(String[] args) {
B b = new B();
b.print();
}
}/**这样试试,你就明白了
*/
public void print(){
this.fun();
}
这里是执行的是A里面的fun方法,因为fun是private的,所以不能重写A里面的fun方法,就算重写了那个也是B里面的fun方法,而print()执行的时A里面的fun()方法,所以它的输出是那样的
package com.chem;
class A{
private void fun(){
System.out.println("******A类方法******");
}
public void print(){
this.fun();
}
}
class B extends A{
void fun(){
System.out.println("******B类方法******");
}
}
public class ExtendsDemo01 {
public static void main(String[] args){
B b=new B();
b.print();//由于B继承了A,所以拥有了A类的print()方法,显然他是直接调用了A类中的print()方法,没有重写该方法,而该方法public void print(){this.fun();}中的this代表当前对象的引用,实际就相当于声明类A对象:A a,然后a.fun();实现了该方法:private void fun(){System.out.println("******A类方法******");打印了"******A类方法******,应该是这样的
}
}
有点明白了 在想想。
马士兵的视频看过了1遍 可能记下来的较少。
我现在看的MLDN的视频,主要是为了加强基础。