JAVA复习题(继承)

JAVA复习题(继承)
JAVA复习题(继承)

类的继承习题

一、选择题

1. Java语言的类间的继承关系是( B )。

A) 多重的 B) 单重的 C) 线程的 D) 不能继承

2. 以下关于Java语言继承的说确的是( C )。

A)Java中的类可以有多个直接父类 B)抽象类不能有子类

C)Java中的接口支持多继承 D)最终类可以作为其它类的父类

3. 现有两个类A、B,以下描述中表示B继承自A的是(D)。

A) class A extends B B) class B implements A

C) class A implements B D) class B extends A

4. 下列选项中,用于定义接口的关键字是( A)。

A)interface B) implements C) abstract D) class

5. 下列选项中,用于实现接口的关键字是( B)。

A)interface B) implements C) abstract D) class

6. Java语言的类间的继承的关键字是( B )。

A) implements B) extends C) class D) public

7. 以下关于Java语言继承的说法错误的是( A )。

A)Java中的类可以有多个直接父类 B)抽象类可以有子类

C)Java中的接口支持多继承 D)最终类不可以作为其它类的父类

8. 现有两个类M、N,以下描述中表示N继承自M的是(D)。

A) class M extends N B) class N implements M

C) class M implements N D) class N extends M

9. 现有类A和接口B,以下描述中表示类A实现接口B的语句是(A)。

A) class A implements B B) class B implements A

C) class A extends B D) class B extends A

10. 下列选项中,定义抽象类的关键字是( C)。

A)interface B) implements C) abstract D) class

11. 下列选项中,定义最终类的关键字是(D)。

A)interface B) implements C) abstract D) final

12. 下列选项中,哪个是java语言所有类的父类(C)

A)String B) Vector C) Object D) KeyEvent

13. java语言中,用于判断某个对象是否是某个类的实例的运算符是(A)

A)instanceof B) + C) isinstance D) &&

14. 下列选项中,表示数据或方法可以被同一包中的任何类或它的子类访问,即使子类在不同的包中也可以的修饰符是(B)

A)public B) protected C) private D) final

15. 下列选项中,表示数据或方法只能被本类访问的修饰符是(C)

A)public B) protected C) private D) final

16. 下列选项中,接口中方法的默认可见性修饰符是(A)

A)public B) protected C) private D) final

17. 下列选项中,表示终极方法的修饰符是:(B)

A)interface B) final C) abstract D) implements

18. 下列选项中,定义接口MyInterface的语句正确的是:(A)

A)interface MyInterface{ } B) implements MyInterface { }

C) class MyInterface{ } D) implements interface My{ }

19. 如果子类中的方法mymethod()覆盖了父类中的方法mymethod(),假设父类方法头部定义如下:void mymethod(int a),则子类方法的定义不合法的是:(C)

A)public void mymethod(int a) B) protected void mymethod(int a)

C) private void mymethod(int a) D) void mymethod(int a)

二、填空题

1. 如果子类中的某个变量的变量名与它的父类中的某个变量完全一样,则称子类中的这个变量________了父

类的同名变量。(隐藏)

2. 属性的隐藏是指子类重新定义从父类继承来的__________。(同名变量或属性)

3. 如果子类中的某个方法的名字、返回值类型和________与它的父类中的某个方法完全一样,则称子类中的这个方法覆盖了父类的同名方法。(参数列表)

4. Java 仅支持类间的____重继承。(单重)

5. 抽象方法只有方法头,没有________。(方法体)

6. Java 语言的接口是特殊的类,其中包含______常量和_______方法。(static(静态); abstract(抽象))

7. 接口中所有属性均为_________、_________和________的。

(public、static、final)

8. 如果接口中定义了一个方法methodA(),一个属性attA,那么一个类ClassA要实现这个接口的话,就必须实现其中的_______方法。(methodA())

9.一个类如果实现一个接口,那么它就必须实现接口中定义的所有方法,否则该类就必须定义成________的。(抽象的)

10. 如果子类中的某个方法的名字、__________和参数列表与它的父类中的某个方法完全一样,则称子类中的这个方法覆盖了父类的同名方法。(返回值类型)

11. Java 仅支持类间的单重继承,接口可以弥补这个缺陷,支持_____重继承(多重)

12. 在方法头用abstract修饰符进行修饰的方法叫做________方法。(抽象)

13.Java语言中用于表示类间继承的关键字是___________。(extends)

14. 接口中所有方法均为________和________的。

(public、abstract)

15. Java语言中,表示一个类不能再被继承的关键字是________。(final)

16. Java语言中,表示一个类A继承自父类B,并实现接口C的语句是_________________。

(class A extends B implements C)。

17. 如果子类中的方法compute()覆盖了父类中的方法compute(),假设父类的compute()方法头部有可见性修饰符public,则methodS()的可见性修饰符必须是__________。(public)

三、程序阅读题

1.现有类说明如下,请回答问题:

public class A

{

String str1=" Hello! \t";

String str2=" How are you? ";

public String toString( )

{ return str1+str2; }

}

public class B extends A

{

String str1="\b\b,Bill.";

public String toString( )

{ return super.str1+str1; }

}

问题:

1)类A和类B是什么关系?(继承关系)

2)类A和类B都定义了str1属性和方法toString( ),这种现象分别称为什么?(属性的隐藏;方法的覆盖)

3)若a是类A的对象,则a.toString( )的返回值是什么?

(Hello! How are you?)

4)若b是类B的对象,则b.toString( )的返回值是什么?(Hello,Bill.)

2.现有一个类定义如下,请回答问题:

class Employee

{

String name;

int age;

double wage;

static int No=0;

Employee(String a1,int a2,double a3)

{

name=a1; age=a2; wage=a3;

No++;

}

}

在使用该类时,已使用下面语句生成了该类的对象:

Employee e1,e2;

e1=new Employee("王劲",26,6300);

e2=new Employee("山",30,3800);

问题:

1)https://www.360docs.net/doc/a66562729.html,,e2.age,e2.wage的值各是什么?(山;30;3800.0)

2)生成对象e1、e2后,e1.No值为多少?能否通过类名做前缀引用属性No?(2; 能)

3.阅读程序,回答问题。

public class InheritTest1

{

public static void main (String[] args)

{

A aa;

B bb;

aa=new A( ); bb=new B( );

aa.show( ); bb.show();

}

}

class A

{

int a=1;

double d=2.0;

void show( )

{ System.out.println("Class A: "+"\ta="+a +"\td="+d); }

}

class B extends A

{

float a=3.0f;

String d="Java program.";

int b=4;

void show( )

{

System.out.println("Class A: "+"\ta="+super.a +"\td="+super.d);

super.show( );

System.out.println("Class B: "+"\ta="+a +"\td="+d+"\tb="+b);

}

}

问题:1)这是哪一类java程序?(java应用程序)

2)类A和类B是什么关系?(类B是类A的子类)

3)按程序输出的格式写出程序运行后的结果.

(程序运行结果如下:

Class A: a=1 d=2.0

Class A: a=1 d=2.0

Class A: a=1 d=2.0

Class B: a=3.0 d=Java program. b=4 )

4.现有类说明如下,请回答问题:

class A

{

int x=10;

int getA(){return x;}

}

class B extends A

{

int x=100;

int getB(){return x;}

}

问题:1)类B是否能继承类A的属性x?(能)

2)若b是类B的对象,则b.getB()的返回值是什么?(100)

3)若b是类B的对象,则b.getA()的返回值是什么?(10)

4)类A和类B都定义了x属性,这种现象称为什么?

(属性的隐藏)

5.有如下源程序,请回答问题:

class A

{ String s="class A"; }

class B extends A

{ String s="class B"; }

public class TypeConvert

{

public static void main(String args[])

{

B b1,b2=new B();

A a1,a2;

a1=(A)b2;

a2=b2;

System.out.println(a1.s);

System.out.println(a2.s);

b1=(B)a1;

System.out.println(b1.s);

System.out.println(b2.s);

}

}

问题: 该程序的四行输出各是什么?

(class A

class A

class B

class B)

6.现有类说明如下,请回答问题:

public class A

{

int x=888;

String str="I like: ";

public String toString()

{ return str+x; }

}

public class B extends A

{

String x="java";

public String toString()

{ return str+x+" and "+super.x; }

}

问题:1)类A和类B是什么关系?(类B是类A的子类)

2)类A和类B都定义了x属性和方法toString(),这种现象分别称为什么?(属性的隐藏和方法的覆盖)

3)若a是类A的对象,则a.toString( )的返回值是什么?(I like: 888)

4)若b是类B的对象,则b.toString( )的返回值是什么?

(I like: java and 888)

7.运行类C的输出结果是什么?

class A

{

public A()

{

System.out.println(“The default constructor of A is invoked”);

}

}

class B extends A

{

public B()

{

}

}

public class C

{

public static void main(String[] args)

{

B b = new B();

}

}

8.阅读下列程序写出输出结果:

class A

{ String s="class A";

void show()

{

System.out.println(s);

}

}

class B extends A

{ String s="class B";

void show()

{

System.out.println(s);

}

}

public class TypeConvert

{

public static void main(String args[])

{

B b1;

B b2=new B();

A a1,a2;

a1=(A)b2;

a2=b2;

System.out.println(a1.s);

a1.show();

System.out.println(a2.s);

a2.show();

b1=(B)a1;

System.out.println(b1.s);

b1.show();

System.out.println(b2.s);

b2.show();

}

}

答案:

class A

class B

class A

class B

class B

class B

class B

class B

四、程序填空题

1.下面是一个类的定义,完成程序填空。(Youwrite this.x=x;)

public class Youwrite

{

int x;

_______( ) {x=0;}

Youwrite ( int x)

{ _____; }

}

2.下面是定义一个接口ITF的程序,完成程序填空。

(interface abstract )

public _______ ITF

{

public static final double PI=Math.PI;

public ______ double area(double a, double b);

}

3.下面是定义一个接口A的程序,完成程序填空。(final ”;”)

public interface A

{

public static _______ double PI=3.14159;

public abstract double area(double a, double b)_____

}

五、编程题

简单类的继承:

1.定义一个类,描述一个矩形,包含有长、宽两种属性,和计算面积方法。

编写一个类,继承自矩形类,同时该类描述长方体,具有长、宽、高属性,和计算体积的方法。

编写一个测试类,对以上两个类进行测试,创建一个长方体,定义其长、宽、高,输出其底面积和体积。public class TestExtends{

public static void main(String[] args){

LiFangTi f=new LiFangTi();

f.length=2;

f.width=3;

f.height=7;

System.out.println("立方体的底面积为:"+f.findArea()+"立方体的体积为:"+f.findVolume());

}

}

class JuXing{

int length;

int width;

int findArea(){

return length*width;

}

}

class LiFangTi extends JuXing{

int height;

int findVolume(){

return findArea()*height;

}

}

3. 定义一个Person类,它包括的属性有“”和“性别”,为Person类派生出一个子类Student类,为Student 子类添加两个属性年龄和成绩等级(用A,B,C,D,E表示),在子类中打印出学生的、性别、年龄及成绩等级。

class Person{

protected String name;

protected String sex;

Person(String name,String sex){

https://www.360docs.net/doc/a66562729.html,=name;

this.sex=sex;

}

public String toString(){

String s=new String();

s=name+"\t"+sex;

return s;

}

}

class Student extends Person{

protected int age;

protected char grade;

Student(String name,String sex,int age,char grade){

super(name,sex);

this.age=age;

this.grade=grade;

}

void print(){

String s=new String();

s=super.toString();

s=s+"\t"+age+"\t"+grade;

System.out.println(s);

}

}

public class TestP{

public static void main(String[] args){

Student st1=new Student("zhangfei","male",23,'E');

Student st2=new Student("liubei","male",25,'A');

System.out.println("name"+"\tset"+"\tage"+"\tgrade");

st1.print();

st2.print();

}

}

4.定义一个类Rectangle代表矩形,其中包括计算面积的方法。再定义一个它的子类Square代表正方形],其中也包含计算面积的方法。编写一程序,测试新建子类对象的属性和方法。

class Rectangle{

float length;

float width;

Rectangle(float len,float wh){

length=len;

width=wh;

}

float getArea(){

return length*width;

}

}

class Square extends Rectangle{

float length;

Square(float len){

super(len,len);

length=len;

}

float getArea(){

return super.getArea();

}

}

public class TestRectangle{

public static void main(String[] args){

Square sq=new Square(5.2f);

System.out.println("side is "+sq.length+",area is "+sq.getArea());

}

}

类与对象习题

一、选择题

1 定义类头时,不可能用到的关键字是( B)。

A) class B)private C)extends D)public

2.下列类定义中,不正确的是(C)。

A) class x { .... }

B) class x extends y { .... }

C) static class x implements y1,y2 { .... }

D) public class x extends Applet { .... }

3.下列类头定义中,错误的是( A)。

A)public x extends y {...}

B) public class x extends y {...}

C)class x extends y implements y1 {...}

D)class x {...}

4.设 A为已定义的类名,下列声明A类的对象a的语句中正确的是( D)。

A) float A a; B) public A a=A( );

C) A a=new int( ); D) static A a=new A( );

5.设 A为已定义的类名,下列声明A类的对象a的语句中正确的是(A)。

A) public A a=new A( ); B) public A a=A( );

C) A a=new class( ); D) a A;

6.设 X 、Y 均为已定义的类名,下列声明类X的对象x1的语句中正确的是(C)。

A) public X x1= new Y( ); B) X x1= X ( );

C) X x1=new X( ); D) int X x1;

7. 设X 、Y为已定义的类名,下列声明X类的对象x1的语句中正确的是(A)。

A) static X x1; B) public X x1=new X(int 123);

C) Y x1; D) X x1= X( );

8.通过类MyClass中的不含参数的构造方法,生成该类的一个对象obj,可通过以下语句实现:_______________________________。

(MyClass obj=new MyClass( );)

9. 设i , j为类X中定义的int型变量名,下列X类的构造方法中不正确的是( A)。

A) void X(int k ){ i=k; } B) X(int k ){ i=k; }

C) X(int m, int n ){ i=m; j=n; } D) X( ){i=0;j=0; }

10. 有一个类A,以下为其构造方法的声明,其中正确的是( A )。

A)public A(int x){...} B)static A(int x){...}

C)public a(int x){...} D)void A(int x){...}

11. 有一个类A,以下为其构造方法的声明,其中正确的是( B )。

A)void A(int x){...} B)A(int x){...}

C)a(int x){...} D)void a(int x){...}

12. 设i、j、k为类X中定义的int型变量名,下列类X的构造方法中不正确的是( B )。

A) X( int m){ ... } B) void X( int m){ ... }

C) X( int m, int n){ ... } D) X( int h,int m,int n){ ... }

13. 设i , j为类X中定义的double型变量名,下列X类的构造方法中不正确的是(A )。

A) double X(double k ){ i=k; return i; } C) X( ){i=6;j=8; }

B) X(double m, double n ){ i=m; j=n; } D) X(double k ){ i=k; }

14. 设a , b为类MyClass中定义的int型变量名,下列MyClass类的构造方法中不正确的是(A)。

double MyClass(double k ){ a=k; return a; }

MyClass( ){a=6;b=8; }

MyClass (double m, double n ){ a=m; b=n; }

MyClass (double k ){ a=k; }

15 定义类头时,不可能用到的关键字是(A)。

A)protected B) class C)extends D)public

16.下列类头定义中,错误的是(A)。

A)public TestClass extends y {...}

B) public class TestClass extends y {...}

C)class TestClass extends y implements y1 {...}

class TestClass {...}

17.设 B为已定义的类名,下列声明B类的对象b的语句中正确的是(D)。

A) float B b; B) public B b=B( );

C) B b=new int( ); D) static B b=new B( );

18.设 ClassA为已定义的类名,下列声明ClassA类的对象ca的语句中正确的是(A)。

A)public ClassA ca=new ClassA( ); B) public ClassA ca=ClassA( );

C) ClassA ca=new class( ); D) ca ClassA;

19.设 A 、B 均为已定义的类名,下列声明类A的对象a1的语句中正确的是(C)。

A) public A a1= new B( ); B) A a1= A ( );

C) A a1=new A( ); D) int A a1;

20. 设A 、B为已定义的类名,下列声明A类的对象a1的语句中正确的是(A)。

A) static A a1; B) public A a1=new A(int 123);

C) B a1; D) A a1= A( );

21.通过类A中的不含参数的构造方法,生成该类的一个对象a,可通过以下语句实现:_______________________________。

(A a=new A( );)

22. 设m , n为类A中定义的int型变量名,下列A类的构造方法中不正确的是( A)。

A) void A(int k ){ m=k; } B) A(int k ){ m=k; }

C) A(int m, int n ){m=i; n=j; } D) A( ){m=0;n=0; }

23. 有一个类Person,以下为其构造方法的声明,其中正确的是( A )。

A)public Person (int x){...} B)static Person (int x){...}

C)public a(int x){...} D)void Person (int x){...}

24. 有一个类Student,以下为其构造方法的声明,其中正确的是( B )。

A)void Student (int x){...} B) Student (int x){...}

C)s(int x){...} D)void s(int x){...}

25. 设i、j、k为类School中定义的int型变量名,下列类School的构造方法中不正确的是( B )。

A) School ( int m){ ... } B) void School ( int m){ ... }

C) School ( int m, int n){ ... } D) School ( int h,int m,int n){ ... }

二、填空题

1.下面是一个类的定义,请完成程序填空。(Myclass int j)

public class ____________

{

int x, y;

Myclass ( int i, _______) // 构造方法

{

x=i; y=j;

}

}

2. 下面是一个类的定义,请将其补充完整。(Student String) class _____

{

String name;

int age;

Student( _____ s, int i)

{

name=s;

age=i;

}

}

3.下面是一个类的定义,请将其补充完整。(myclass static)class ____________ // 定义名为myclass的类

{

__________ int var=666;

static int getvar()

{ return var; }

}

4.下面程序的功能是通过调用方法max()求给定的三个数的最大值,请将其补充完整。(max(i1,i2,i3) static)

public class Class1

{

public static void main( String args[] )

{

int i1=1234,i2=456,i3=-987;

int MaxValue;

MaxValue=____________;

System.out.println("三个数的最大值:"+MaxValue);

}

public ______ int max(int x,int y,int z)

{ int temp1,max_value;

temp1=x>y?x:y;

max_value=temp1>z?temp1:z;

return max_value;

}

}

5.下面是一个类的定义,请将其补充完整。(class static)

___________ A

{ String s;

_____ int a=666;

A(String s1) { s=s1; }

static int geta( ) { return a; }

}

6.下面是一个类的定义,请完成程序填空。(Room int n)

public class ____________

{

int a, b;

Room ( int m, _______) // 构造方法

{

a=m; b=n;

}

}

7. 下面是一个类的定义,请将其补充完整。(class String)

_____ Teacher

{

String name;

int age;

Teacher ( _____ s, int i)

{

name=s;

age=i;

}

}

8.下面是一个类的定义,请将其补充完整。(Desk static)

class ____________ // 定义名为Desk的类

{

__________ int var=666;

static int getvar()

{ return var; }

}

9.下面程序的功能是通过调用方法max()求给定的二个整数的最大值,请将其补充完整。(max(a1,a2) int)

public class Class1

{

public static void main( String args[] )

{

int a1=1234,a2=456;

int MaxValue;

MaxValue=____________;

System.out.println("二个数的最大值:"+MaxValue);

}

public static ______ max(int x,int y)

{ int max_value;

max_value =x>y?x:y;

return max_value;

}

}

10.下面是一个类的定义,请将其补充完整。(class static)

___________ Bank

{ String s;

_____ int a=666;

Bank(String s1) { s=s1; }

static int geta( ) { return a; }

}

三、程序阅读题

1.下面是一个类的定义,根据题目要求回答以下问题.

class B

{

private int x;

private char y;

public B(int i,char j)

{

x=i; y=j;

}

public void show()

{

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

}

public void methodC(int x)

{

this.x=this.x+x;

y++;

show();

}

}

(1)定义类B的一个对象b,将类中的变量x初始化为10、变量y初始化为’A’,请写出相应的语句。(B b=new B(10,’A’);)

(2)若在(1)问基础上有方法调用语句:

b.show();

则输出如何?(x=10; y=A)

(3)若在(1)问基础上增加语句: b.methodC(1); 则输出为何?(x=11; y=B)

(x=11; y=B)

2.阅读程序,回答问题。

public class Test52

{

String static str1="Hello, Java world! \t";

String static str2="Hello, students! ";

public static void main(String args[])

{ System.out.print(str1); System.out.println(str2); }

}

问题:1)这是哪种形式的 java 程序?(java应用程序)

2)程序的输出是什么?

(Hello, Java world! Hello, students! )

3. 写出下列程序的输出结果

public class Test

{

public static void main(String[] args)

{

Count myCount = new Count();

int times = 0;

for(int i=0;i<100;i++)

increment(myCount , times);

System.out.println(“count is” + myCount.count);

System.out.println(“time is”+ times);

}

public static void increment(Count c , int times)

{

c.count++;

times++;

}

}

class Count

{

public int count;

Count(int c)

{

count =c;

}

Count()

{

count =1;

}

}

答案:

count 101

times 0

4.写出下列程序的输出结果:

public class Test

{

public static void main(String[] args)

{

Cirecle circle1 = new Circle(1);

Cirecle circle2 = new Circle(2);

// Attempt to swap circle 1 with circle2

System.out.println(“Before swap:circle1 = ”+circle1.radius +”circle2 = ”+circle2.radius);

swap(circle1,circle2);

System.out.println(“After swap: circle1 = ”+circle1.radius +”circle2 = ”+circle2.radius);

}

public static void swap(Circle x , Circle y)

{

System.out.println(“Before swap: x = ”+x.radius

+”y = ”+y.radius);

Circle temp = x;

x = y;

y = temp;

System.out.println(“Before swap: x = ”+x.radius

+”y = ”+y.radius);

}

}

答案:

5.阅读下面程序,回答问题:

public class Foo

{

int i;

static String s;

void imethod()

{

}

static void smethod()

{

}

}

设f是Foo的一个实例,下列语句正确吗?System.out.println(f.i);

System.out.println(f.s);

f.imethod();

f.smethod();

System.out.println(Foo.i);

System.out.println(Foo.s);

Foo.imethod();

Foo.smethod();

答案:

System.out.println(f.i);

答案:正确

System.out.println(f.s);

答案:正确

f.imethod();

答案:正确

f.smethod();

答案:正确

System.out.println(Foo.i);

答案:错误

System.out.println(Foo.s);

答案:正确

Foo.imethod();

答案:错误

Foo.smethod();

答案:正确

6.下列程序的输出结果是什么?

public class Foo

{

static int i=0;

static int j=0;

public static void main(String[] args)

{

int i=2;

int k=3;

{

int j=3;

System.out.println(“i + j is ”+ i + j);

}

k = i +j;

System.out.println(“k is ”+k);

System.out.println(“j is ”+ j);

}

}

答案:

i + j is 23

k is 2

j is 0

7. 根据下面的程序,指出下面每个元素的作用域(类作用域或块作用域)变量x

变量y

方法cude

变量 i

变量 yPos

public class CubeTest

{

int x;

public void print()

{

int yPos = 10;

for(x=1;x<=10;x++)

{

System.out.println(cude(x));

for(int i=1;i<=yPos;i++)

System.out.println(" ");

}

}

public int cude (int y)

{

return y*y*y;

}

}

答案:

变量x :类作用域

变量y :块作用域

方法cude :类作用域

变量 I :块作用域

变量 yPos :块作用域

四、简答题

1. 面向对象的软件开发方法用什么把数据和基于数据的操作封装在一起?(类)

2. 在一个类定义中,用什么描述对象的状态? 用什么描述对象的行为?(属性;方法)

3. 什么方法是一个特殊的方法,用于对对象进行初始化?

(构造方法)

4. 一个源程序文件中,能有多于一个的 public 类吗?(不能)

5. 构造方法的方法名可由编程人员任意命名吗?

(不能,必须与类名同名)

6. 类的构造方法名必须和类名相同吗?(必须)

7. 构造函数有返回值吗?(没有)

8. 构造函数可以重载吗? (可以)

9. 如果一个类定义中没有定义构造方法,该类有构造函数吗?

(有,编译器会自动生成一个缺省的不带参数的构造函数)

10. 如果一个类定义中已经定义了构造方法,java还会给它定义缺省的构造方法吗?(不会)

11. 类的访问控制权有哪两种?(public 和缺省的(即没有访问控制修饰符))

12. 用什么修饰符修饰的方法称为静态方法? 用什么修饰符修饰的属性称为静态属性?(static)

13. 静态属性和静态方法仅属于类的一个具体对象吗?它属于谁?

(不是;它是类的所有对象公有的)

14. static 变量能是 private 变量吗?(可以)

15. 使用静态成员都能以什么做前缀?(可以用类名或对象名做前缀)

16. static方法中能有this引用吗?(不能)

17. 非static方法中可以有this引用吗?(可以)

18.static方法能处理非static成员吗?(不能)

19.非static方法能处理static成员吗?(能)

20. 类的私有属性和私有方法能不能被其子类直接访问? (不能)

五、编程题

1、基本类定义:

编写一个类,描述学生的学号、、成绩。学号用整型,成绩用浮点型,用String类型。

编写一个测试类,输入学生的学号和成绩,并显示该学号的学生,以及成绩。

class Student{

int sNum;

double score;

String name;

}

public class T1_Student{

public static void main(String[] args){

Student s=new Student();

s.sNum=101;

s.score=97;

https://www.360docs.net/doc/a66562729.html,="三";

System.out.println(https://www.360docs.net/doc/a66562729.html,+"的学号是"+s.sNum+"成绩是"+s.score);

}

}

2、基本类定义:

将上述类进行改写,学生拥有判断自己的成绩是否及格的功能。并能够打印输出自己的和是否及格的信息(方法名:printInfo())

编写一个测试类,对学生类进行测试。

class Student{

int sNum;

double score;

String name;

void printInfo(){

if(score>=60){

System.out.println("我的是"+name+"我的成绩为及格");

}

else{

System.out.println("我的是"+name+"我的成绩为不及格");

}

}

}

public class T1_Student{

public static void main(String[] args){

Student s=new Student();

s.sNum=101;

s.score=97;

https://www.360docs.net/doc/a66562729.html,="三";

System.out.println(https://www.360docs.net/doc/a66562729.html,+"的学号是"+s.sNum+"成绩是"+s.score);

s.printInfo();

}

}

3、设计一个Birthday类,其成员变量有:year,month,day;提供构造方法、输出Birthday对象值的方法和计算年龄的方法。编写程序测试这个类。

import java.util.Date;

public class Birthday

{

private int year;

private int month;

private int day;

public Birthday(int year,int month,int day)

{

this.year=year;

this.month=month;

this.day=day;

}

public void print()

{

System.out.println(“您的生日是:”+year+”年”+month+”月”+day+”日”);

}

public void age()

{

int age= int age=Calendar.getInstance().get(Calendar.YEAR)-year;

System.out.println(“您的年龄是:”+age);

}

public static void main(String[] args)

{

Birthday b=new Birthday(1980,12,6);

b.print();

b.age();

}

}

9、设计一个学生类,其中成员变量应包括:学号,,性别,班级,并提供方法打印学生信息,和计算已经创建学生对象的数目。编写一个程序测试这个类。

public class Student

{

private long id;

private String name;

private char sex;

private String banji;

private static int count=0;

public Student(long id,String name,char sex,String banji)

{

this.id=id;

https://www.360docs.net/doc/a66562729.html,=name;

this.sex=sex;

this.banji=banji;

count++;

}

public void print()

{

System.out.println(“该生信息如下:”);

System.out.println(“学号:”+id+”:”+name+”性别:”+sex+”班级:”+banji);

}

public static void count()

{

System.out.println(“已经创建的学生个数为:”+count);

}

public static void main(String[] args)

{

Student a=new Student(01,“zhangsan”,’男’,”计专01班”);

a.print();

Student.count();

Student b=new Student(03,”倩”,’女’,”计专03班”);

b.print();

Student.count();

}

}

12.设计一个关于三角形的类Trival,其中的属性包括三角形的底di,三角形的高gao,方法包括:默认构造方法、为di和gao指定初值的构造方法、获取三角形面积findArea()。

class Trival

{

double di;

double gao;

Trival()

{

di=1.0;

gao=2.0;

}

Trival(double i,double j)

{

di=i;

gao=j;

}

double findArea()

{

return di*gao/2;

}

}

Applet小应用程序习题

单项选择题

1.下列不在applet生命周期中的方法是(C)。

A)init B)start C)execute D)stop

2.KeyListener接口中处理键盘事件的处理器不包括(D)。

A)keyPressed B keyReleasd C keyTyped D mouseEntered

3.第一次装载或重装applet时,都要调用(A)方法。

A)init B)start C)stop D)destroy

4.鼠标进入组件时调用的方法是(B)。

A)mouseExit B)mouseEntered C)mouseMoved D)mouseReleased

5.按下按钮移动鼠标时调用(C)鼠标处理器

A)mouseMoued B)mouseReleased C)mouseDragged D)mouseClicked

6.下列哪个事件不是所有GUI组件都能产生的事件( A )

A)ActionEvent B)MouseEvent C)KeyEvent D)FocusEvent

7.下列哪些事件处理方法不是定义在MouseListener中( D )

A)mouseEntered B)mousePressed C)mouseClicked D)mouseMoved

8. 下列哪些事件处理方法不是定义在KeyListener中( A )

A)keyClicked B)keyPressed C)keyReleased D)keyPressed

9.在Applet应用程序的生命周期中,以下说确的是: (C)

A)当打开浏览器窗口时,系统会自动调用start方法,在Applet应用程序的生命周期中,start方法可执行多次;

B)当激活浏览器窗口时,系统会自动调用start方法,在Applet应用程序的生命周期中,start方法只可执行一次;

C)当打开浏览器窗口时,系统会自动调用init方法,在Applet应用程序的生命周期中,init方法只可执行一次;

D)当激活浏览器窗口时,系统会自动调用init方法,在Applet应用程序的生命周期中,init方法可执行多次。

10.如果重写了Applet的paint方法,在以下何种情况中,会自动调用paint方法绘图。 (D)

A)当浏览器运行时

B)当Applet 容被覆盖后又重新显示时

C)在执行repaint方法重新绘图时

D)包括以上三种情况

11.在浏览器中执行applet 程序,以下选项中的哪个方法将被最后执行( C )。

A)init() B)start() C)destroy() D)stop()

12.在编写Java Applet程序时,需要在程序的开头写上( B )语句。

A)import java.awt.* ; B)import java.applet.* ;

C)import java.io.* ; D)import java.awt.event.* ;

JAVA类的继承实验报告

《面向对象程序设计》实验报告 实验六、类的继承 课程代码:1H10500学分:6 实验类型:实践型实验学时:4个学时 实验时间:2017.11.23 实验地点:5407 班级:计算机164 专业:计算机科学与技术专业学号:2016011147 姓名:林文辉 一、实验目的 (1)学习JAVA继承的思想 (2)了解JAVA语言继承的实现 二、实验内容及步骤 内容:在圆柱体类Cylinder里,用一个构造方法调用另一个构造方法 步骤:方案的设计与分析(类结构图。。。。。。) (1)找出对象的共同属性和行为 (2)设计代表共同状态与行为的类 (3)决定子类是否需要让某项行为有特定的不同的运行方式 (4)寻找更多抽象化的机会 (5)完成类的继承层次 三、实验过程及结果 实验1代码: abstract class Graphics { abstract void parameter(); abstract void area(); } class Rectangle extends Graphics{ double h,w; Rectangle(double u,double v){h=u;w=v;} void parameter() { S ystem.out.println("矩形高度为:"+h+",矩形宽度为:"+w); } void area() { S ystem.out.println("矩形面积为:"+(h*w)); } }

class Circle extends Graphics{ double r; String c; Circle(double u,String v){r=u;c=v;} void parameter() { System.out.println("圆半径为:"+r+",圆颜色为:"+c); } void area() { System.out.println("圆面积为:"+(Math.PI*r*r)); } } class ExamAbs{ public static void main(String args[]) { Rectangle rec=new Rectangle(2.0, 3.0); Circle cir=new Circle(4.0, "Red"); Graphics[]g= {rec,cir}; for(int i=0;i

Java 接口与类之间继承例题

1,定义一个接口Assaultable(可攻击的),该接口有一个抽象方法attack()。 2,定义一个接口Mobile(可移动的),该接口有一个抽象方法move()。 3,定义一个抽象类Weapon,实现Assaultable接口和Mobile接口,但并没有给出具体的 实现方法。 4,定义3个类:Tank,Flighter,WarShip都继承自Weapon,分别用不同的方式实现Weapon 类中的抽象方法。 5,写一个类Army,代表一支军队,这个类有一个属性是Weapon数组w(用来存储该军队所拥有的所有武器);该类还提供一个构造方法,在构造方法里通过传一个int类型的参数来限定该类所能拥有的最大武器数量,并用这一大小来初始化数组w。该类还提供一个方法addWeapon(Weapon wa),表示把参数wa所代表的武器加入到数组w中。在这个类中还定义两个方法attackAll()和moveAll(),让w数组中的所有武器攻击和移动。 6,写一个主方法去测试以上程序。 interface Assaultable{//可攻击的 void attack(); } interface Mobile{//可移动的 void move(); } abstractclass Weapon implements Assaultable,Mobile { publicvoid attack(){} publicvoid move(){} } class Tank extends Weapon{ publicvoid attack(){ System.out.println("坦克攻击!!!"); } publicvoid move(){ System.out.println("坦克移动!!!"); } } class Flighter extends Weapon{ publicvoid attack(){ System.out.println("战斗机攻击!!!"); } publicvoid move(){ System.out.println("战斗机移动!!!");

java 类的继承 实验报告(含代码)

实验三类的继承 实验目的:掌握类的继承、抽象类的定义和使用、对象的向上转型。实验内容:已知若干图形,求以该图形为底的锥体的体积。 实验要求:用面向抽象的思想实现 实验步骤: 1、程序总体框架 2、在shape包中创建抽象类Shape,代码如下: 3、在centrun包中创建一个类Centrun,代码如下:

Centrun这个类为核心类,在之后的代码编写中可以不做更改,getVolume函数用来求椎体的体积,即利用抽象类getArea进行适应性计算。 4、创建一个包myshape,在其中先创建一个Circle类,代码如下:

Circle是对抽象类shape的继承(记得导入shape包),在Circle类中,利用对getArea 函数代码的重写操作,具体实现了求圆的面积这一操作。【此处的具体实现应该放入该图形的具体面积求法。】 5、创建一个包Test,对以上三个包中的代码进行具体实现,代码如下: 导入myshape包,在main函数中通过向上转型,实例化shape包中的抽象类Shape,然后调用函数输出圆锥的体积。 6、在求出实验结果1,即调试好shape、myshape、centrun这三个包后,不再更改shape、centrun包,而是在myshape包下新建所需的类,如本次实验所需的三角形、矩形; 7、在myshape包下创建一个类Rectangular,代码如下:

8、在myshape包下创建一个类Triangle,需注意的是,求三角形的面积需要判断三角形的三边能否构成三角形(不能构成时返回0),代码如下:

实验结果: 1、Test测试包最终代码:

java中继承的相关知识总结

JAVA中继承的总结 一、继承概念: 把多个类中相同的成员给提取出来定义到一个独立的类中。然后让这多个类和该独立的类产生一个关系, 这多个类就具备了这些内容。这个关系叫继承。 二、何时实现继承 A:继承体现的是:is a的关系。 B:采用假设法 三、怎么实现继承 A:用关键字extends表示 B:格式: class 子类名 extends 父类名 {} C:子类 public class 子类 extends 父类 { //增加自己属性 //重写父类的属性 //增加自己的方法 //重写父类的方法 } 四、继承的好处: A:提高了代码的复用性 B:提高了代码的维护性

C:让类与类产生了一个关系,是多态的前提 继承的弊端: A:让类的耦合性增强。这样某个类的改变,就会影响其他和该类相关的类。 原则:低耦合,高内聚。 耦合:类与类的关系 内聚:自己完成某件事情的能力 B:打破了封装性 五、Java中继承的特点 A:Java中类只支持单继承,只能一个直接父类,Object 根类 B:Java中可以多层(重)继承(继承体系) 六、继承的注意事项: A:子类能继承父类的私有成员,但不是都能访问 B:子类不能继承父类的构造方法,但是可以通过super去访问 C:不要为了部分功能而去继承 七、继承中static用法 A:static:子类可以继承父类的静态方法,但不能重写 B:static 的属性和方法都是不能覆盖的,因为static修饰的部分都是与对象无关的,只与类有关 八、Java继承中的成员关系 A:成员变量 a:子类的成员变量名称和父类中的成员变量名称不一样,这个太简单 b:子类的成员变量名称和父类中的成员变量名称一样,这个怎么访问呢?

JAVA继承类求几何图形面积周长代码

class shap2D { static double getArea; //面积 static double getPerimeter; //周长 } class circle extends shap2D { double r; double getRadius(){return r=2;} double getArea() {return Math.PI*r*r;} double getPerimeter() {return 2*Math.PI*r;} public String toString() { String s; return s="周长:"+getPerimeter()+"面积:"+getArea(); } } class Triangle extends circle { double a,b,c; Triangle (double x,double y,double z) {a=x; b=y;c=z;} void setA(double x){a=x;} double getA(){return a;} public double getPerimeter() {return a+b+c;} public double getArea() { double s=(a+b+c)/2; return Math.sqrt(s*(s-a)*(s-b)*(s-c)); } public boolean isTriangle() { boolean flag=false; if(a>0&&b>0&&c>0&&a+b>c&&a+c>b&&c+b>a) flag=true; return flag; } } class rectangle extends circle { double a,b;

java练习题-继承

一.extends和super的使用和方法的重写 1.定义一个人的类(属性有名字,年龄。写一个能输出各个属性值 的方法showInfo()),定义一个学生类(属性有性别),学生继承人类 要求:(1)父类的属性赋值用构造方法来实现(分别用有参数构造方法和无参数构造方法实现) (2)子类的属性也用构造方法来赋值。 (3)在子类中重写父类的showInfo()方法 (4)声明学生类的对象,调用学生的显示信息的方法。 2 定义Animal父类,含有属性name,sex,age,方法sleep,run,编写一个子类Person,继承Animal类,然后调用父类的属性和方法二. 1、试编写三个具有继承关系的类,A、B、C(B继承A,C继承B)。 要求A中包含方法a1()、a2(),B类中的方法b1()访问了a1() 和a2(),C类中的方法c1()访问了a1()、a2()、b1()。 提示:(a1(),a2(),b1(),c1()这些方法体除了实现题目要求之外,其余内容可以任意编写。) 2、请编码实现动物世界的继承关系: 动物(Animal)具有行为:吃(eat)、睡觉(sleep) 动物包括:兔子(Rabbit),老虎(Tiger) 这些动物吃的行为各不相同(兔子吃草,老虎吃肉);但睡

觉的行为是一致的。 请通过继承实现以上需求,并编写测试类AnimalTest进行测试。3、父类Person 包含like()方法子类Son 重写父类方法并打印输出 4、(选做)父类Employee 属性:name、sex ,带一个构造方法Employee(String n, char s) 子类Worker继承自Employee 属性:char category;法()可以调用父类 的所有非私有方法 B) super()可以调用父类的所有非私有构造函数 C) super.属性可以调用父类的所有非私有属性 D) this和super关键字可以出现在同一个构造函数中 8.以下关于final关键字说法错误的是(A,C)(两项) A) final是java中的修饰符,可以修饰类、接口、抽象类、方法和属性 B) final修饰的类肯定不能被继承 C) final修饰的方法不能被重载 D) final修饰的变量不允许被再次赋值 9.访问修饰符作用范围由大到小是(D) A) private-default-protected-public B) public-default-protected-private C) private-protected-default-public D) public-protected-default-private 10.以下(D)不是Object类的方法 A) clone() B) finalize() C) toString() D) hasNext() 11.多态的表现形式有(A) A) 重写 B) 抽象 C) 继承 D) 封装 12.以下对重载描述错误的是(B)

Java中类的继承

Java中类的继承 1、方法重载 重载方法必须满足以下条件: #方法名相问. #方法的参数类型、个数、顺序至少有一项不相同。 #方法的返回类型可以不相同。 #方法的修饰符可以不相同. 方法覆盖 (1)子类方法的名称、参数签名和返回类型必须与父类方法的名称、参数签名和返回类型一致. (2)子类方法不能缩小父类方法的访问权限. (3)子类方法不能抛出比父类方法史多的异常, (4)方法覆盖只存在于子类和父类(包括直接父类和间接父类)之间.在同一个 类中方法只能被重载,不能被扭盖。 (5)父类的静态方法不能被子类覆盖为非静态方法。 (6)子类可以定义与父类的静态方法同名的静态方法,以便在子类中隐藏父类的静态方法.在编译时,子类定义的静态方法也必须满足与方法覆盖类似的约束。 (7)父类的非静态方法不能被了类覆盖为静态方法。 (8)父类的私有方法不能被子类覆盖。 (9)父类的抽象方法可以被子类通过两种途径覆盖:一是子类实现父类的抽象方法:二是子类重新声明父类的抽象方法。 (10)父类的非抽象方法可以被覆盖为抽象方法. 方法覆盖与方法重载的异同 方法覆盖和方法重载具有以下相同点: #都要求方法同名. #都可以用于抽象方法和非抽象方法之间. 方法筱盖和方法重载具有以下不同点: #.方法覆盖要求参数签名必须一致.而方法重载要求参数签名必须不一致.

#.方法覆盖要求返回类型必须一致,而方法重载对此不做限制. #.方法覆盖只能用于子类覆盖父类的方法,方法重载用于同一个类的所有方d (包括从父类中继承而来的方法)。 #.方法覆盖对方法的访问权限和抛出的异常有特殊的要求,而方法重载在这力面没有任何限制。 #.父类的一个方法只能被子类覆盖一次,而一个方法在所在的类中可以被重载多次。 super关键字 super和this关键字都可以用来履盖Java语言的默认作用域.使被屏蔽的方法或变 盆变为可见。在以下场合会出现方法或变量被屏蔽的现象. .场合一:在一个方法内.当局部变量和类的成员变量同名,或者局部变量和父类的成员变量同名时,按照变量的作用域规则,只有局部变量在方法内可 见。 .场合二:当子类的某个方法覆盖了父类的一个方法。在子类的范围内,父类 的方法不可见. .场合三:当子类中定义了和父类同名的成员变量时,在子类的范围内,父类 的成员变量不可见。 在程序中,在以下情况下会使用super关键字: #在类的构造方法中,通过super语句调用这个类的父类的构造方法。 #在子类中访问父类的被屏蔽的方法和属性。 多态性 它是指当系统A访问系统B的服务时,系统B可以通过多种实现方式来提供服务, 而这一切对系统A是透明的. 多态的各种特性 (1)对于一个引用类型的变量,Java编译器按照它声明的类型来处理. (2)对于一个引用类型的变盆.运行时Java虚拟机按照它实际引用的对象来处理.例如以下代码虽然编译可以通过,但运行时会抛出ClassCastException运行时异常. Sub sub=new Sub();

JAVA复习习题(继承)

类的继承习题 一、选择题 1. Java语言的类间的继承关系是( B )。 A) 多重的B) 单重的C) 线程的D) 不能继承 2. 以下关于Java语言继承的说法正确的是( C )。 A)Java中的类可以有多个直接父类B)抽象类不能有子类 C)Java中的接口支持多继承D)最终类可以作为其它类的父类 3. 现有两个类A、B,以下描述中表示B继承自A的是(D)。 A) class A extends B B) class B implements A C) class A implements B D) class B extends A 4. A) 5. A) 6. Java 7. A)Java C)Java 8. A) class C) class 9. 现有类 A) class C) class 10. A) 11. A) 12. A) 13. java A) 14. 饰符是( A) 15. A) 16. A)public B) protected C) private D) final 17. 下列选项中,表示终极方法的修饰符是:(B) A)interface B) final C) abstract D) implements 18. 下列选项中,定义接口MyInterface的语句正确的是:(A) A)interface MyInterface{ } B) implements MyInterface { } C) class MyInterface{ } D) implements interface My{ } 19. 如果子类中的方法mymethod()覆盖了父类中的方法mymethod(),假设父类方法头部定义如下:void mymethod(int a),则子类方法的定义不合法的是:(C) A)public void mymethod(int a) B) protected void mymethod(int a) C) private void mymethod(int a) D) void mymethod(int a) 二、填空题 1. 如果子类中的某个变量的变量名与它的父类中的某个变量完全一样,则称子类中的这个变量________了父类

JAVA课程设计——员工工资管理(类的继承)

JAVA课程设计——员工工资管理 import java.util.Scanner; class Employee{ private String name; privateint birthmonth; public String getName() { return name; } publicvoid setName(String name) { https://www.360docs.net/doc/a66562729.html, = name; } publicint getBirthmonth() { return birthmonth; } publicvoid setBirthmonth(int birthmonth) { this.birthmonth = birthmonth; } publicdouble getSalary(int thismonth){ if(birthmonth==thismonth){ return 100; } else return 0; } publicvoid print(){ System.out.print("员工信息:\n姓名:"+name+",出生月份:"+birthmonth+","); } public Employee(String name,int birthmonth){ setName(name); setBirthmonth(birthmonth); } } //固定工资 class SalariedEmployee extends Employee{ privateint salary; public SalariedEmployee(String name, int birthmonth,int salary) { super(name, birthmonth); this.salary=salary; } publicdouble getSalary(int thismonth) { return salary+super.getSalary(thismonth); } publicint basesalary(){return salary;} } //小时工 class HourlyEmployee extends Employee{ privateint hoursalary; privateint monthhour; privateint salary; public HourlyEmployee(String name, int birthmonth,int hoursalary,int monthhour) { super(name, birthmonth);

java 中关于 继承 的一个小例子

上一次跟别人解答,没想到没提交上去,又不想删了,所以做成文档,才入这行朋友可以看下 Question 1. 编码实现动物世界的继承关系: a) 动物(Animal)具有行为:吃(eat)、睡觉(sleep) b) 受保护得物件(接口)具有得行为:beProtected(); c) 有价值得物件(接口)具有得行为:getMoney() d) 老虎是动物,同时是有价值且受保护得动物类型。 e) 熊猫是动物,同时是有价值且受保护得动物类型。 f) 这些动物吃的行为各不相同(熊猫吃竹子,老虎吃肉);但睡觉的行为是一致的;受保护得级别不一致,价值也不一致。 g) 请通过继承,接口实现以上需求,并编写测试类AnimalTest进行测试。 Animail.java父类-动物类 package com; /** * @author Administrator * */ public class Animal { private String name; private String food; //吃的一个行为 public void eat() throws Exception{ System.out.println(https://www.360docs.net/doc/a66562729.html,+"吃"+this.food+"!"); } //睡觉的一个行为 public void sleep(){ System.out.println(https://www.360docs.net/doc/a66562729.html,+"在睡觉!"); } public String getName() {

return name; } public void setName(String name) { https://www.360docs.net/doc/a66562729.html, = name; } public String getFood() { return food; } public void setFood(String food) { this.food = food; } } AnimalInterface.Java 接口 package com; public interface AnimalInterface { //默认为public,因为接口要被实现,并被广范使用, //所以最好是public因为如果不是公开的就没有必要做接口了void beProtected(); void getMoney(); } AnimalTest.java 测试类 package com; public class AnimalTest { /**

java中方法的继承

ava中方法的继承,覆盖 (2011-01-17 02:13:42)转载▼ 标签:杂 谈 首先要明确一点,子类在继承父类时,构造函数是不能被继承的。当创建子类的实例时,子类的构造函数要调用父类的构造函数,也就是说父类要先于子类构造。子类的构造函数可以通过super关键字显式调用父类中的构造函数。如果子类中的构造函数没有显式调用父类中的构造函数,编译器就会自动在子类的构造函数中调用父类中参数为空的构造函数。当父类中没有定义任何构造函数时,编译器就会为它指定一个参数为空的默认的构造函数;如果父类中定义了构造函数,那么编译器就不会为它指定一个参数为空的默认构造函数了。因此,如果某个类有可能成为其他类的父类,为了避免发生不必要的编译错误,最好为它编写一个参数为空的构造函数。父类Sup中没有定义构造函数,编译程序将为它指定一个参数为空的默认构造函数。子类Sub 中也没有定义构造函数,编译程序也会为它指定一个参数为空的默认的构造函数,并且会在这个默认的构造函数中调用父类的参数为空的构造函数。 public class Sub extends Sup{ //子类中没有定义构造函数 public static void main(String args[]){ Sub sub=new Sub(); } } class Sup{ //父类中没有定义构造函数 } 父类Sup中没有定义构造函数,编译程序将为它指定一个参数为空的默认构造函数。子类定义了一个带整型参数的构造函数,在这个构造函数中子类没有显式调用父类的构造函数,所以编译器为在它里面调用父类中参数为空的构造函数。 public class Sub extends Sup{ //子类中定义类一个带整型变量参数的构造函数 public Sub(int i){ // } public static void main(String args[]){ Sub sub=new Sub(1); } } class Sup{ //父类中没有定义构造函数 } 父类中定义了一个带整型参数的构造函数,因此编译器不再为它指定参数为空的默认的构造函数。子类中也定义了一个带整型参数的构造函数。编译时,编译器将试图在子类的构造函数中调用父类的参数为空的构造函数,但是父类中没有定义参数为空的构造函数,所以编译程序将会报

java程序设计类的继承以及super的 使用

实验五:类的继承以及super的使用 一、实验目的 熟练地掌握Java语言的掌握类的继承以及super的使用的编程。通过实验掌握编写程序的思想方法,体会编程的技巧,加深Java语言的应用能力。 二、实验环境 硬件环境:微型计算机。 软件环境:Windows 2000或以上版本,JKD, Jcreator 三、实验内容与要求 用Java语言编程实现以下问题: 1、利用课本类的继承编写程序,定义一个车类Vehicle,代表一类交通工具,在这个类中包含成员变量品牌brand,颜色color,价格price(单位:万元)和一个void SetVehicle()方法,通过这个方法使其成员变量赋值,再定义一个小汽车类Car 去继承车类Vehicle,在这个类中再包含一个成员变量速度speed和一个void SetCar()方法,通过这个方法使其所有的成员变量赋值再定义一个public类,包含main()方法,在这个方法中,用Car这个类创建一个对象,并分配内存空间,用对象去调用SetCar()方法,然后对象去调用各个成员变量并输出其值。 程序: class Vehicle { String brand,color; double price; void SetVehicle(String b,String c,double p) { brand=b; color=c; price=p; } } class car extends Vehicle { double speed; void SetCar(String b,String c,double p,double s) { SetVehicle(b,c,p); speed=s; } } public class che_test { public static void main(String args[]) { car m=new car(); m.SetCar("联想","银白",2.0,100.0); System.out.println("品牌:"+m.brand+" 颜色:"+m.color+" 价格:"+m.price+"

JAVA中类的继承的理解

JAVA中类的继承的理解 Java类的继承可以是多层的,但不能是多头的。也就是说类只能继承一个类而不能继承多个类。好比一个人只能有一个爹,不能有多个爹,当然爹上面还能有爹。 类实现继承的格式:class子类名extends 父类名 类的继承有三方面的内容,一是父类变量与方法的继承,二是父类变量与方法的覆写或称之为重载,三是super与this的使用区别。 类的继承使用范例: class Person { String name; int age; } class Student extends Person { String school; } Public class TestPersonStudentDemo { public static void main(String[] args) { Student s = new Student();//实例化了Student类s https://www.360docs.net/doc/a66562729.html, = “张三”; //访问Person类中的name属性 s.age = 25; //访问Person类中的age属性 s.school = “北京” ; //访问Student类中的school属性 System.out.println(“姓名:”+https://www.360docs.net/doc/a66562729.html,+”,年龄:”+s.age+”,学校:”+s.school); } } 子类在继承父类中的方法与属性时,首先会执行父类中的构造方法,再执行子类中的构造方法。一般子类中隐含了super()语句(super主要的功能是完成子类调用父类中的内容)。 类的继承使用范例1: class Person { String name; int age; //父类中的构造方法 public Person(String name,int age) { https://www.360docs.net/doc/a66562729.html, = name; this.age = age; }

Java继承的概念与实现

继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承(例如儿子继承父亲财产)类似。 继承可以理解为一个类从另一个类获取方法和属性的过程。如果类B继承于类A,那么B就拥有A的方法和属性。 继承使用 extends 关键字。(参考网站:https://www.360docs.net/doc/a66562729.html,/RA5iKhq) 例如我们已经定义了一个类 People: 1class People{ 2 String name; 3int age; 4int height; 5 6void say(){ 7 System.out.println("我的名字是 " + name + ",年龄是 " + age + ",身高是 " + height); 8 } 9 } 如果现在需要定义一个类 Teacher,它也有 name、age、height 属性和 say() 方法,另外还需要增加 school、seniority、subject 属性和 lecturing() 方法,怎么办呢?我们要重新定义一个类吗? 完全没必要,可以先继承 People 类的成员,再增加自己的成员即可,例如: 1class Teacher extends People{ 2 String school; // 所在学校 3 String subject; // 学科 4int seniority; // 教龄 5 6// 覆盖 People 类中的 say() 方法 7void say(){ 8 System.out.println("我叫" + name + ",在" + school + "教" + subject + ",有" + seniority + "年教龄"); 9 } 10 11void lecturing(){ 12 System.out.println("我已经" + age + "岁了,依然站在讲台上讲课"); 13 } 14 }

java类的继承和多态

第八章类的继承和多态 教学目的: 深刻理解类的继承 教学内容: 1、类的继承和实现 2、构造器的调用 3、防止类的继承 一、类的继承和实现 所谓继承就是在已经存在类的基础上再扩展新的类。已经存在的类我们称父类、超类、基类。新产生的类,我们称子类、派生类。子类拥有父类的所有特性。当然我们也可以在子类中添加新的方法和成员变量,这些新添加的方法和成员变量仅仅属于子类。 在Java中通过关键字“extends”来实现。 比如在学生类中,有一种特殊的学生就是学生干部,他们出来拥有和普通学生一样的方法和属性之外,有的有一个职务描述(Duty)。 我们定义学生管理类ClassManger,它拥有父类的所有的方法和属性。 一般来讲,应该把相对通用的方法都放在父类中,只有更具体和专门的方法放在子类中。 1、对于学生干部而言,我们要添加一个属性就可以了 private String duty=””; 2、但是student里的print()就不能满足我们的ClassMange的要求了。而且student的构造方法也不能直接用来ClassMange上。 那么我们怎么定义ClassMange()和print()呢?如果重新写很麻烦,可不可以在父类方法的基础上修改呢?只要使用关键字super就可以了。 this:一个对象的引用。 super:是用来告诉编译器调用父类的方法的关键字。 代码如下: class school { public static void main(String[] args) { student[] stu=new student[3]; stu[0]=new ClassMange("章三","2009001","班长"); stu[1]=new student("李四","2009002"); stu[2]=new student("王五","2009003"); /* for (int i=0;i

相关主题
相关文档
最新文档