JAVA基础习题3-类的继承

一、实验目的:

1、掌握类和构造方法的定义

2、类的继承。

 

二、实验内容和要求:

1.运行下面的程序,理解成员变量的继承与隐藏。

import java.io.*;
 class sum_3{
            int sum,num1,num2;
            static int num3;
            //定义构造函数初始化对象
     sum_3(){
                   num1=0;
                   num2=0;
                   num3=0;
                   sum=0;
            }
 }
 class sub_sum3 extends sum_3{
            int sum,num1,num2;        //隐藏父类sum_3中的实例变量
            static int num3;                //隐藏父类sum_3中的类变量
               void sum(int i,int j,int k){
                   num1=i;
                   num2=j;
                   num3=k;
                   sum=num1+num2+num3;
            }
 }
 public class computing{
     public static void main (String arg[]){
           sub_sum3 m1=new sub_sum3();
        m1.sum(100,200,300);
        System.out.println("sum="+m1.num1+"+"+m1.num2+"+"+m1.num3+"="+m1.sum);
        }
 }

运行结果:

0cfb9b38ed6542ffb4125b558d5ab091.png

问题:a、子类的sum,num1,num2分别是多少,父类的sum,num1,num2 分别是多少,如何在main中输出父类的sum,num1,num2。

父类的sum=0;num1=0;num2=0

子类的sum=600;num1=100;num2=200;

输出:先继承父类的tostring方法

 

b、就这个例子,谈谈你对覆盖的理解?

覆盖是指在子类中定义与父类同名且参数类型和个数都相同的方法。

2.运行下面的程序,理解方法的继承。

2.class Sort3{
            double max1,max2,max3;
            Sort3(){
                   max1=-1;
                   max2=-1;
                   max3=-1;
            }
         void sort(){
                   double s;
                   if (max1<max2){ s=max1;max1=max2;max2=s; }
                   if (max1<max3){ s=max1;max1=max3;max3=s; }
                   if (max2<max3){ s=max2;max2=max3;max3=s; }
            }
  }
 class sub_Sort3 extends Sort3{
            void subsort(double i,double j,double k){
                   max1=i;
                   max2=j;
                   max3=k;
                sort();  //调用父类中的方法sort() …….①              }
 }
 public class Class1{
                 public static void main (String args[]){
              sub_Sort3 m1 = new sub_Sort3();
                    m1.subsort(100,200,300);
                  System.out.println("三个数从大到小为:"+m1.max1+","+m1.max2+","+m1.max3);
                 }
 }

 

c5433ec5cbf147558238a2a891f60a74.png

3.运行下面的程序,理解方法的重载。

class Sort2or3{
          double max1,max2,max3;
         Sort2or3(){
                   max1=-1;
                    max2=-1;
                   max3=-1;
            }
            void sort(double i,double j){
                   double s;
                   max1=i;
                   max2=j;
                   if(max1<max2){ s=max1;max1=max2;max2=s; }
            }
            void sort(double i,double j,double k){
                   double s;
                   max1=i;
                   max2=j;
                   max3=k;
                   if (max1<max2){ s=max1;max1=max2;max2=s; }
                   if (max1<max3){ s=max1;max1=max3;max3=s; }
                   if (max2<max3){ s=max2;max2=max3;max3=s; }
            }
 }
 public class Class1{
            public static void main (String args[]){
                 Sort2or3 m1 = new Sort2or3();
                 m1.sort(100,200);
                 System.out.println("两个数从大到小为:"+m1.max1+","+m1.max2);
                 m1.sort(50,150,100);
                 System.out.println("三个数从大到小为:"+m1.max1+","+m1.max2+","+m1.max3);
            }
 }

运行结果为:

7c18a9cd4a61494097da7d14105d7def.png

 

4.运行下面的程序,理解方法的覆盖。

class sort_Demo{
            int i,j,k,swap;
            sort_Demo(){
                   i=j=k=swap=0;
            }
            void sort(int t1,int t2[]){                   //父类中的方法用来实现升序
                   //用选择法按升序排列
                   for(i=0;i<t1-1;i++){
                          k=i;
                          for(j=i+1;j<t1;j++)
                                 if(t2[j]<t2[k]) k=j;
                          if (k!=i){
                                 swap=t2[i];
                                 t2[i]=t2[k];
                                 t2[k]=swap;
                          }
                   }
            }
 }
 class sub_sort_Demo extends sort_Demo{
            void sort(int t1,int t2[]){            //子类中的方法实现降序
                //用选择法实现降序排列
                   for(i=0;i<t1-1;i++){
                          k=i;
                          for(j=i+1;j<t1;j++)
                                 if(t2[j]>t2[k]) k=j;
                          if (k!=i){
                                 swap=t2[i];
                                 t2[i]=t2[k];
                                 t2[k]=swap;                         }                    }
            }
        } 
 public class Class1{
            public static void main (String args[]){
                   int a[]={34,12,8,67,88,23,98,101,119,56};
                sort_Demo m1=new sort_Demo();
                   sub_sort_Demo m2=new sub_sort_Demo();
                         System.out.println("排序前的数据为:");
                   for (int i=0;i<10;i++)
                          System.out.print("  "+a[i]);
                   //调用父类中的sotr()方法
         m1.sort(a.length ,a);
                   System.out.println("\n按升序排列的数据为:");
                   for (int i=0;i<10;i++)
                          System.out.print("  "+a[i]);
                   //调用子类中的sort()方法,该方法实现了对父类中方法的覆盖
         m2.sort(a.length ,a);
                         System.out.println("\n按降序排列的数据为:");
                   for (int i=0;i<10;i++)
                          System.out.print("  "+a[i]);               } }

4b0fa0f270694beb93c3a38bf77adf37.png

问题 :比较3和4,谈谈你对重载和重写的认识,最好可以自己举例说明

重载 可以实现本类内的方法多态性, 重写 可以实现子类或实现类的多态性

5.按如下要求定义两个类A和B, 类A中定义一个int 类型属性x(将其赋值为8)和一个在命令行下输出x值的方法myPrint()。类B是类A的子类,其中也定义一个int 类型属性y(将其赋值为16)和String类型的属性s(将其赋值为"java program!");一个在命令行下输出y和s值的方法myPrint();类B中还有一个方法printAll( ),该方法中分别调用父类和子类的myPrint()方法。编写Application,创建类类B的对象b,调用printAll( )方法,输出结果

lass A {

    int x = 8;

    void myPrint() {
        System.out.println("x的值为:" + x);
    }
}

class B extends  A {
        int y=16;
        String s="java program!";
        void myPrint(){
            System.out.println("y的值为:"+y);
            System.out.println("s的值为:"+s);

        }
        void printAll(){
            super.myPrint();
            this.myPrint();
        }

    public static void main(String[] args) {
        B b=new B();
        b.printAll();
    }
}

760dea9d6b894c5eadd89731845211a2.png

6.请编写应用程序,它由两个类定义组成:类A中定义了int型变量i和float型变量x,及一个带两个参数的构造函数(为变量i和x做初始化)。主类test中创建了一个A类的对象a(i的初始值2,x的初始值8.0),还定义了一个方法b,b的参数和返回值均为A类的对象,功能为将参数对象的属性i加1,属性x加2。请在main()方法中显示调用b(a)后的a的两个成员变量的变化结果。

public class Application{
    public String toString;
    private int i;
    private float x;

    public Application(int i, float x) {
        this.i = i;
        this.x = x;
    }

    public int getI() {
        return i;
    }

    public void setI(int i) {
        this.i = i;
    }

    public float getX() {
        return x;
    }

    public void setX(float x) {
        this.x = x;
    }
    public String toString(){
        return "Application[i="+i+",x="+x+"]";
    }
}
class ApplicationTest {
    public static void main(String[] args) {
        Application a=new Application((int)2,(float)8);
        System.out.println(a.toString());
        System.out.println(b(a).toString);

    }
    public static Application b(Application a){
        a.setI((int)(a.getI()+1));
        a.setX((float)(a.getX()+2));
        Application k=new Application(a.getI(),a.getX());
        return k;
    }


}

a8fc90b07bcb4677818e5360802a7308.png

 

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值