Java面向对象_练习题

1:final关键字可以干什么?有什么特点?

作用: 


       它可以修饰类,那么该类不能继承
       它可以修饰成员方法,成员方法不能被重写
       它可以修饰变量,此时这个变量是一个常量

特点:

final:表示最终,终态(不能被更改的)

2:final关键字的面试题?

final,finally,finalize的区别?

final:一般在继承中用到,定义一些常量;

finally:在数据库里释放资源;

finalize:垃圾回收方法;

3:多态是什么,前提是什么?

多态:在同一个时刻,体现出来的不同状态;
多态的前提:
               1)必须有继承关系
                               子类继承父类,存在一些特点
               2)必须有方法重写
                               子类继承父类,方法重写的目的,举例:动物吃的方法,每一个具体动物吃的东西不一样,所有必须要方法覆盖
               3)就是必须有父类的引用指向子类对象 (向上转型)
                               父类名  fu = new  子类名() ;

4:多态中成员访问的特点?

                      1)成员变量:                                               编译看左,运行看左...
                      2)成员方法(非静态):                                  编译看左,运行看右(存在方法重写)
                      3)构造方法:构造方法(无论子类,还是父类),都是对对象进行初始化
                      4)静态成员方法:                                        编译看左,运行看左(静态跟类有关系,算不上方法重写)


5:多态的好处及弊端?如何解决多态的弊端?

 多态的好处:
                  可以提供代码的复用性:继承保证
                  可以提高的代码的扩展性:由多态保证...  (父类的引用指向子类对象)
 多态的弊端:
                  父类引用指向子类对象,
                  通过父类的引用调用子类特有功能,不能调用....

 解决方案:
                 向下转型

6:什么是向上转型?什么是向下转型?

向上转型:父类的引用指向子类对象
向下转型:将父类的引用强制转换子类的引用

7:抽象类概述及其特点?

抽象类的概念:
   针对一个事物,比如:动物类---->总体概括,之前定一个具体的动物(---->必须给他的某个功能只是声明即可),只有,猫或者狗等等这些才是具体事物
  Java中,如果一个类中有一个方法声明(抽象方法)抽象功能,那么这个类定义为抽象类
   
 关键字:abstract  抽象的意思
   抽象类的特点:抽象类不能直接实例化!(不能创建对象)

8:抽象类成员特点?

成员变量:可以是变量,也是一个常量
构造方法:可以有无参,可以有有参,作用:给对象进行初始化的.
成员方法:可以有抽象方法,还可以有非抽象方法...

9:抽象类的小问题

A:一个类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?

可以

B:abstract不能和哪些关键字共存

                    abstract 和private
                    abstract 和final
                    abstract和static

10:接口的概述及其特点?

接口:体现的是事务的扩展性功能(额外动作,后天经过学习等等)
接口的特点:不能实例化


 11:接口的成员特点?

           成员变量:是一个常量,不能更改,并且默认的修饰符
                        public static final:
           构造方法:接口不存在构造方法
           成员方法:都是抽象方法
                          默认的修饰符:public abstract

12:抽象类和接口的区别?

	A) 成员的区别
		成员变量:
				抽象类:既可以常量,也可以是变量
				接口:只能是常量,默认的修饰符:public static final
		构造方法:
				抽象类:有构造方法,无参/有参 (给对象进行初始化的)
				接口:没有构造方法
		成员方法:
				抽象类:可以有抽象方法,也可以有非抽象方法
				接口:只能是抽象方法 :默认的修饰符:public abstract
	
	
	B)类与类/类与接口关系的区别
		类与类之间的关系:
					继承关系,只支持单继承,不支持多继承,但是可以多层继承
		类与接口的关系:
					实现关系,一个类继承另一个类的同时,还可以实现多个接口...
		接口与接口的关系:
					是一种继承关系,既可以单继承,也可以多继承...
					接口1 extends 接口2,接口3...
	
	
	
	
	C)设计原则的 区别
		1)抽象类: 是有继承关系---->体现的是一种"is a"的关系   (A是B的一种或者B是A的一种)
		2)接口:类和接口:实现关系--->体现的是一种" like a"的关系(扩展功能)  :跳高猫 像猫

13:编程题:

 老师和学生案例,加入抽烟的额外功能 (自己给定成员,测试即可!)

package homework;
//抽象类
public abstract class Person {
 
 private String name ;
 private int age ;
 
 public Person() {
  super();
 }
 public Person(String name, int age) {
  super();
  this.name = name;
  this.age = age;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 
 public abstract void work() ;
  
 
}
package homework;
//接口
public interface Somking {

	public abstract void Somking() ;
}
package homework;
//学生类,额外动作:抽烟
public class Student extends Person implements Somking{

	public Student() {
		super();
	}

	public Student(String name, int age) {
		super(name, age);
	}


	@Override
	public void work() {
		System.out.println("学生们写Java作业...");

		
	}

	@Override
	public void Somking() {
		System.out.println("学生抽烟...");
	}


}
package homework;
//老师类
public class Teacher extends Person{

	public Teacher() {
		super();
	}

	public Teacher(String name, int age) {
		super(name, age);
	}
	public void work() {
		System.out.println("老师们教Java...");
	}

	

}
package homework;
//	老师和学生案例,加入抽烟的额外功能 (自己给定成员,测试即可!)
public class Test {
	public static void main(String[] args) {
		Student s = new Student("张   三",22);
		System.out.println(s.getName()+"---"+s.getAge());
		s.work();
		s.Somking();
		Teacher t = new Teacher("张老师",30);
		System.out.println(t.getName()+"---"+t.getAge());
		t.work();
		
		
	}

}

14: 代码块是什么?代码块的分类和各自特点?

 关于代码块的概述:

                用{}括起来的代码,统称为代码块;

根据其位置以及声明不同:分为以下:

                局部代码块: 在main()里面,给变量限定它的生命周期

                构造代码块:在一个类中的成员位置中,用{}括起来,

                          作用:可以将多个构造方法中的相同的代码放到构造代码块中,对对象进行初始化.    在每次执行构造方法之前,先                                     行构造代码块.

                静态代码块:在一个类的成员位置,也是用{}包起来,但是他被static修饰

                          作用:一般情况 它的作用给类进行初始化

15 静态代码块,构造代码块,构造方法的执行流程?

 静态代码块>构造代码块>构造方法

16:继承的好处

                 1)提供了代码复用性,解决了代码的臃肿
                 2)它是多态的前提(多态的前提是必须有继承关系)

17:Java中继承的特点

 1)子类继承父类,是继承了父类所有的东西(成员变量,成员方法,包括私有),但是子类不能使用私有的东西,只能通过父类的公共的访问间接的让子类访问它.
 2)在Java中,继承只支持单继承,不支持多继承(子类名 extends 父类名1,父类名2,...)。但是,Java是可以支持多层继承...

18:Java中继承的注意事项?以及我们什么时候使用继承?

注意事项:

             1)构造方法不能被继承,但是通过super关键字去访问
             2)私有的可以间接的去访问
             3)什么时候使用extends

 继承体现的是一种"is a"的关系:如果A是B的一种或者B是A的一种,这个可以使用继承!

19:面试题:
 方法重写和方法重载的区别?
 Overload
 Override

 Overload:方法名一样,参数不同,和返回值没有关系
              参数不同:
                           1)参数个数不同
                           2)参数类型不同
 Override:方法重写 (子类定义一个和父类一摸一样的方法声明) 
                           继续中使用到的

20 下列有关类、对象和实例的叙述,正确的是哪一项?(d )
  A.类就是对象,对象就是类,实例是对象的另一个名称,三者没有差别
  B.对象是类的抽象,类是对象的具体化,实例是对象的另一个名称
  C.类是对象的抽象,对象是类的具体化,实例是类的另一个名称
  D.类是对象的抽象,对象是类的具体化,实例是对象的另一个名称

21 下列有关抽象类的叙述正确的是哪项?(c)
  A.抽象类中一定含有抽象方法
  B.抽象类既能被实例化也能被继承
  C.抽象类的声明必须包含abstract关键字
  D.抽象类中不能有构造方法

22  下列有关接口的叙述错误的是哪项?(d)
  A.接口中只能包含抽象方法和常量
  B.一个类可以实现多个接口
  C.类实现接口时必须实现其中的方法
  D.接口不能被继承

23 下列关于类的继承的描述,正确的有( b )
  A. 一个类可以同时继承多个父类
  B. 一个类可以具有多个子类
  C. 子类会自动拥有父类所有的方法
  D. 一个类继承另一个类需要使用 extends 关键字

24 下列关于构造函数的说法正确的是(b  )
  A. 方法名必须与类名相同
  B. 使用new关键字创建对象时,java虚拟机会自动调用构造函数
  C. 我们在定义一个类时,必须要声明至少一个构造函数
  D. 构造函数中不能使用return语句(这个是错的,可以rutrun;)

25. 关于继承, 以下说法正确的是: (a)
  A.Java中只支持单继承, 一个类只能继承一个类, 但是可以有多个子类
  B.一个类如果没有自己写无参构造方法, 那么子类将无法继承
  C.子类可以当父类用, 父类不可以当子类用
  D. 子类重写父类方法时访问权限不能更低

26 运行以下的main()方法,结果是?(a  )
    1 public static void main(String[] args)
    2 {
    3        String myString;
    4        int x = 100;
    5  
    6        if (x < 100) myString = "x is less than 100";
    7        if (x > 100) myString = "x is greater than 100";
    8        System.out.println(myString.length());
    9 }
  A. 编译时报出错误提示信息“变量myString没有被初始化”
  B. 编译通过
  C. 编译未能通过。但如果变量myString在第8行前的代码中被初始化,代码可以编译通过,运行时可以输出字符串myString的长度
  D. 以上都不对

猜你喜欢

转载自blog.csdn.net/Tunaep/article/details/80003419