(邓爱萍)继承 课本

一.域的隐藏

  1. d.x 子类对象d的x的值,,子类的同名域值
class Base{

    int x=3;

    public void m(){

        x++;

        System.out.println("base 的x值为:"+x);

    }

}

class Derived extends Base{

    double x=20;

    public void n(){

        x--;

        System.out.println("derived的x值为:"+x);

    }

}

public class TestFieldHide {

    public static void main(String[] args){

        Derived d=new Derived();

        System.out.println("derived对象的域x的值为:"+d.x);

    } 

}

class Base{

    int x=3;

    public void m(){

        x++;

        System.out.println("base 的x值为:"+x);

    }

}

class Derived extends Base{

    double x=20;

    public void n(){

        x--;

        System.out.println("derived的x值为:"+x);

    }

}

public class TestFieldHide {

    public static void main(String[] args){

        Derived d=new Derived();

        System.out.println("derived对象的域x的值为:"+d.x);

    } 

}

 

2.

  • d.m()  d.n()一个是子类继承自父类的变量,一个是子类自己定义的变量。这两个成员变量名称相同,但是代表完全不同的变量。

当执行子类从父类继承的方法时,方法内处理的是 继承自父类的变量;

当执行子类定义的方法时,方法内处理的是自己的成员变量。

 

class Base{

    int x=3;

    public void m(){

  System.out.println("Base x值为:"+x);

    }

}

 

class Derived extends Base{

    double x=20;

    public void n(){

        System.out.println("Derivedx值为:"+x);

    }

public void getHideX()

{  System.out.println(" 父类中的域x值为:"+(super.x));   }

}

public class TestFieldHide1 {

    public static void main(String[]args){

        Derived d=new Derived();

        d.m();

       

        d.n();

         d.getHideX();

    }

}

 

二.方法的覆盖

1.子类在继承超类定义的同时,可以重新修改超类中原有定义的属性和方法,,通过子类的对象调用这个同名的方法时,只能使用新的方法(子类的同名方法)

 

class A{

         int x=3;

         public void m(){

                   System.out.println("the x of A is"+x);    }

}

class B extends A{

         double y=20.67;

         public void m(){          //  同名方法 返回值类型 相同

                   y--;

                   x--;      //x为类A中定义的域,可以被子类B的方法 直接操作        

                   System.out.println("y="+y+" ,x="+x);

         }

}

public class C {

    public static void main(String[] args){

    B b=new B();

    b.m();  //    子类自己定义的方法

    }

}

2.在子类的  方法中使用super .m(),,使用父类的同名方法

 

class A{

         int x=3;

         public void m(){

                   System.out.println("the x of A is"+x);

         }

}

 

class B extends A{

         double y=20.67;

         public void m(){

                   y--;

                   x--;

                   System.out.println("y="+y+" ,x="+x);

                                super.m(); //子类的方法中,使用父类的同名方法

         }

}

public class C {

    public static void main(String[] args){

    B b=new B();

    b.m();

    }

}

3.同名的方法  方法名相同  参数表相同  但是方法的 返回值类型不同==编译错误

class A{

    int x=3;

    public void m(){

       System.out.println("the x of A is"+x);

    }

}

class B extends A{

    double y=20.67;

    public double m(){

       y--;

       x--;

       System.out.println("y="+y+" ,x="+x);

                          

 return y;

    }

}

public class C {

    public static void main(String[] args){

        B b=new B();

        b.m();

    }

}

 

4.访问权限

方法的访问范围,可以不变、扩大,不可缩小。

class A{

    int x=3;

    public void m(){

        System.out.println("the x of A is"+x);

    }

}

class B extends A{

    double y=20.67;

     void m(){

        y--;

        x--;

        System.out.println("y="+y+" ,x="+x);

    }

}

public class C {

    public static void main(String[] args){

    B b=new B();

    b.m();

    }

}

5.方法的重载

如果1方法名相同,3参数表不同==这两个方法是不同的方法    方法的重载

(一)

 

class A{

    int x=3;

    public void m(){

        System.out.println("the x of A is"+x);

    }

}

class B extends A{

    double y=20.67;

    public void m(int a){

        y--;

        x--;

        System.out.println("y="+y+" ,x="+x);                   

    }

}

public class C {

    public static void main(String[] args){

    B b=new B();

     b.m();      // 使用 继承自父类的方法

    }

}

(二)

 

三,对象的类型转换

1.类作为一种 引用数据类型。类的对象===基本数据类型的 变量,,,不同类 也存在 对象和对象之间的 类型转换问题。

2.只能在具有继承关系的 父类 子类对象之间进行

3.a.向上类型转换(直接):   父类类型 对象=子类对象   

子类对象 转换为父类类型,即 特殊类型 到通用类型

b.向下类型转换(强制):      子类对象=(子类)父类对象

  1. 子类—>父类  削弱了子类的功能(域和方法)

public class Human {

 String name;

 int age;

 char sex;

public Human(String name, int age, char sex) {

    super();

    this.name = name;

    this.age = age;

    this.sex = sex;

}

int getAge(){ return age; }

}

 

 

public class Worker extends Human {

    double salary;

    Worker(String name,int age,char sex,double salary){

        super(name,age,sex);

        this.salary=salary;

    }

    void addSalary(double sum){  salary+=sum;}

 

}

 

public class TestCasting {

 public static void main(String[]args){

     Worker a=new Worker("Mary",20,'',100000);

     Human h=a;

     System.out.println(h.name+" "+h.age+" "+h.sex+" ");

 }

}

 

2.

public class TestCasting {

 public static void main(String[]args){

Human h=new Worker("Mary",20,'',100000); //创建子类对象

                                       父类对象=子类对象初始化

     Worker a=(Worker)h;  //强制转换 子类对象=(子类型)父类对象

     System.out.println(a.name+" "+a.age+" "+a.sex+" "+a.salary);

 }

}

 

5555555

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangchuang2017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值