4.18作业

1:final关键字可以干什么?有什么特点?
答:final表示最终,终态的意思,不能被更改的

            1. 修饰类时,该类不能被继承
               修饰成员方法时,成员方法不能被重写
               修饰变量时,此时变量是一个常量  
            2.final修饰基本类型时,该类型的值不能改变
                修饰引用类型时,该引用值的地址值不能再改变了,但是堆内存中的成员变量值可以改变
            3.final成员变量必须由程序员显示初始化,系统不会对final成员变量 默认初始化    


2:final关键字的面试题?
 
package org.westos.finaldemo;
class Fu{
	public final void show() {
		System.out.println("这是一个绝密文件,任何多不能更改...");
	}
}

//Zi类
class  Zi extends Fu{
//	public void show() {//Cannot override the final method from Fu  :不能重写被final修饰Fu类的方法
//		System.out.println("这是一堆垃圾....");
//	}
}
//测试类
public class ZiDemo {

	public static void main(String[] args) {
		
		Zi zi =new Zi() ;
		zi.show();
	}
}

 
3:多态是什么,前提是什么?
    多态是在同一个时刻,体现出的不同状态
        多态前提:必须要继承关系
                        必须有方法重写
                        必须有父类的引用指向子类对象

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

     成员变量 :编译看左,运行看左
      成员方法(非静态):编译看左,运行看右(存在方法重写)
      构造方法:无论是子类还是父类都是对对象进行初始化
      静态成员方法:编译看左,运行看左

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

好处:提高代码复用性,由继承保证
        提高代码扩展性,由多态保证(父类引用指向子类对象)
弊端:通过父类的引用调用子类特有功能,不能调用,
解决:需要向下转型


6:什么是向上转型?什么是向下转型?
 
向上转型:父类名 f =new 子类名();
向下转型:子类名 s=(子类名)f;


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


1.抽象类的概念:
   Java中,如果一个类中有一个方法声明(抽象方法)抽象功能,那么这个类定义为抽象类
    
 2.关键字:abstract  抽象的意思
 3.抽象类的特点:抽象类不能直接实例化!(不能创建对象)  接口也不能实例化
    
                         如果一个类中有抽象方法,那么这个类是一定是一个抽象类
                         抽象类中不一定都是抽象方法
 4.抽象类的子类
          如果子类是抽象类,没有意义,因为都不能实例化
          子类具体类,那么子类必须实现父类中的抽象功能.
    
  
8:抽象类成员特点?

抽象类的成员特点:
   成员变量: 可以是变量,也是一个常量
   构造方法:可以有无参,可以有有参,作用:给对象进行初始化的.
   成员方法:可以有抽象方法,还可以有非抽象方法.
  
   abstract 和private,final,static不能共有

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

    可以,一个抽象类可以没有抽象方法,但由抽象 方法的一定是抽象类

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


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

1.接口:体现的是事务的扩展性功能(额外动作,后天经过学习等等)
 
 接口格式
  interface  接口名{
     //抽象功能
     public abstract void jump() 
    }
 2.接口的特点:不能实例化
 接口的子实现类:实现类 (具体的实现类)
 class 类名+impl implements 接口名{
 
 }接口的子类如果是抽象类:没有意义,不能实例化
 
11:接口的成员特点?

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

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

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

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

package org9;

public class people {
	private String name;
	private int age;
	//无参构造
	public people() {
		super();
	}
	//有参构造
	public people(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 void study() {
		System.out.println("好好学习");
	}
	public void smoke() {
		System.out.println("抽烟");
	}
}

public class student extends people {

	public student() {
		super();
	}

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

	public void study() {
		System.out.println("学生在学习Java");
	}
	public void smoke() {
		System.out.println("学生抽烟");
	}
	
	
}

public class teacher extends people {

	public teacher() {
		super();
	}

	public teacher(String name, int age) {
		super(name, age);
	}
	public void study() {
		System.out.println("老师在教课");
	}
	public void smoke() {
		System.out.println("老师不抽烟");
	}
	

	
}

public class peopleTest {
	public static void main(String[]args) {
		student s=new student("jeffery",22);
		System.out.println(s.getName()+" "+s.getAge());
		s.study();
		s.smoke();
		
		teacher t=new teacher("张三",35);
		System.out.println(t.getName()+" "+t.getAge());
		t.study();
		t.smoke();
	}
}


14: 代码块是什么?代码块的分类和各自特点?
          
      用{}括起来的代码,统称为代码;
        根据其位置以及声明不同:分为以下:
                     局部代码块: 在main()里面,给变量限定它的生命周期
                     构造代码块:在一个类中的成员位置中,用{}括起来,
                                              作用:可以将多个构造方法中的相同的代码放到构造代码块中,对对象进行初始化.   
                                                       在每次执行构造方法之前,先执行构造代码块.
                     静态代码块:在一个类的成员位置,也是用{}包起来,但是他被static修饰
                                              作用:一般情况 它的作用给类进行初始化
 

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

        

            先执行静态代码块,再执行构造代码块,最后执行构造方法                


16:继承的好处

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


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


18:Java中继承的注意事项?以及我们什么时候使用继承?
    
        1)构造方法不能被继承,但是通过super关键字去访问
         2)私有的可以间接的去访问

         不要随意的使用继承,只要有"is a"的关系就使用它..


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

 Overload
 Override
                    重载:一个类中有一个方法A,你又在这个类中创建了一个方法B,方法B的名字和A一样,返回值类型也一样,但是参数的类型或个数不同,此时B重载了A。
                 重写:一个类M继承另一个类N,N中有一个方法A,这时你在M写了一个方法B,方法B的名字、返回值以及参数都和A一样,此时B重写了A。

20 下列有关类、对象和实例的叙述,正确的是哪一项?(D)
  A.类就是对象,对象就是类,实例是对象的另一个名称,三者没有差别
  B.对象是类的抽象,类是对象的具体化,实例是对象的另一个名称
  C.类是对象的抽象,对象是类的具体化,实例是类的另一个名称
  D.类是对象的抽象,对象是类的具体化,实例是对象的另一个名称
21 下列有关抽象类的叙述正确的是哪项?(C)
  A.抽象类中一定含有抽象方法
  B.抽象类既能被实例化也能被继承
  C.抽象类的声明必须包含abstract关键字
  D.抽象类中不能有构造方法
22  下列有关接口的叙述错误的是哪项?(D)
  A.接口中只能包含抽象方法和常量
  B.一个类可以实现多个接口
  C.类实现接口时必须实现其中的方法
  D.接口不能被继承
23 下列关于类的继承的描述,正确的有( BD )
  A. 一个类可以同时继承多个父类
  B. 一个类可以具有多个子类
  C. 子类会自动拥有父类所有的方法
  D. 一个类继承另一个类需要使用 extends 关键字
24 下列关于构造函数的说法正确的是( AB )
  A. 方法名必须与类名相同
  B. 使用new关键字创建对象时,java虚拟机会自动调用构造函数
  C. 我们在定义一个类时,必须要声明至少一个构造函数
  D. 构造函数中不能使用return语句(这个是错的,可以rutrun;)
25. 关于继承, 以下说法正确的是: (A)
  A.Java中只支持单继承, 一个类只能继承一个类, 但是可以有多个子类
  B.一个类如果没有自己写无参构造方法, 那么子类将无法继承
  C.子类可以当父类用, 父类不可以当子类用
  D. 子类重写父类方法时访问权限不能更低
26 运行以下的main()方法,结果是?( C )
    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/fnwibwj/article/details/79996372