码迷,mamicode.com
首页 > 编程语言 > 详细

黑马程序员----java基础---抽象类和接口,附相关面试题

时间:2015-06-10 08:52:02      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:java面试题   抽象类   接口   java基础   

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一:抽象类(掌握)

(1)把多个共性的东西提取到一个类中,这是继承的做法。
  但是呢,这多个共性的东西,在有些时候,方法声明一样,但是方法体。
  也就是说,方法声明一样,但是每个具体的对象在具体实现的时候内容不一样。
  所以,我们在定义这些共性的方法的时候,就不能给出具体的方法体。
  而一个没有具体的方法体的方法是抽象的方法。
  在一个类中如果有抽象方法,该类必须定义为抽象类。
(2)抽象类的特点
A:抽象类和抽象方法必须用关键字abstract修饰
abstract class Animal{}  这是抽象类的声明格式
public abstract void eat()  这是抽象方法的格式
public abstract void eat(){}  这是一个空方法题,不是抽象方法

B:抽象类中不一定有抽象方法,但是有抽象方法的类一定要被定义为抽象类
C:抽象类不能实例化
因为它不是具体的,抽象类有构造方法,但是不能实例化?那么构造方法的作用是什么呢?
抽象类的构造方法用于访问父类数据的初始化。
D:抽象类的子类
a:是一个抽象类。如果不想重写抽象方法,就要把子类定义为抽象类。
b:是一个具体类。这个类必须重写抽象类中的所有抽象方法。


补充:抽象类的实例化其实是靠具体的子类来实现的。这是多态的方式。  Animal a=new Cat();
(3)抽象类的成员特点:
A:成员变量
既可以有变量,又可以有常量
B:构造方法
有构造方法,用于子类访问父类数据的初始化。
C:成员方法
必须有抽象方法,可以有非抽象

抽象类的成员方法特性
A:抽象方法, 是强制要求抽象父类的子类要有的方法。
B:非抽象方法, 子类继承的事情,为了提高代码的复用性。
(4)抽象类的练习
A:猫狗案例练习
B:老师案例练习
C:学生案例练习
D:员工案例练习
(5)抽象类的几个小问题(面试题)
A:抽象类有构造方法,不能实例化,那么构造方法有什么用?
用于子类访问父类数据的初始化
B:一个类如果没有抽象方法,却定义为了抽象类,有什么用?
为了不让创建对象
C:abstract不能和哪些关键字共存
a:final 冲突 (常量无法被重写)
b:private 冲突 (抽象方法就是为了让子类重写,私有不能被继承,所以不能被重写 )
c:static 无意义


二::接口(掌握)
(1)回顾猫狗案例,它们仅仅提供一些基本功能。
  比如:猫钻火圈,狗跳高等功能,不是动物本身就具备的,
  是在后面的培养中训练出来的,这种额外的功能,java提供了接口表示。
(2)接口的特点:
A:接口用关键字interface修饰
格式: interface 接口名 {}
B:类实现接口用implements修饰
class 类名 implements 接口名 {}
C:接口不能实例化。那么如何实例化呢?通过多态的方式来实例化。
D:接口的实现类(子类)
a:可以是一个抽象类。(但是意义不大)
b:可以是一个具体类,这个类必须重写接口中的所有抽象方法。(推荐方案)


由此可见:具体类的多态(几乎不用)  抽象类多态(常用)  接口多态(最常用)
(3)接口的成员特点:
A:成员变量
接口对常量默认用public static final修饰,不论你是否这样写,系统都会默认这样的修饰符
所以接口的成员变量只能是常量
默认修饰符:public static final
B:构造方法
接口没有构造方法。因为接口主要是扩展功能的,没有具体存在。
C:成员方法
接口成员方法的默认修饰符:public abstract。不论你是否把这些修饰符写全,系统都会默认这些修饰符。
所以接口的成员方法只能是抽象的

(4)类与类,类与接口,接口与接口
A:类与类
继承关系,只能单继承,可以多层继承 如:class A{}  class B extends A{} class C extends B{}
B:类与接口
实现关系,可以单实现,也可以多实现。
还可以在继承一个类的同时,实现多个接口 
如:class A{}  interface Father{} interface Mother{} 
class B extends A implements Fathrer,Mother{}
C:接口与接口
继承关系,可以单继承,也可以多继承 
如:interface Father{} interface Mother{}   interface Son extends Father,Mother{}
(5)抽象类和接口的区别
A:成员区别
抽象类:
成员变量:可以是变量,也可以是常量
构造方法:有
成员方法:可以是抽象方法,也可以是非抽象
接口:
成员变量:只可以是常量
构造方法:无
成员方法:只可以是抽象方法
B:关系区别:
类与类:继承关系,只可以单继承,
类与接口:实现关系,可以单实现,也可以多实现
接口与接口:继承关系,可以单继承,也可以多继承
C:设计理念不同
抽象类:被继承体现的是is a的关系,抽象类中定义的是共性功能。 比如猫是动物,就具有动物共有的功能
接口:被实现体现的是like a的关系,接口中定义的是扩展功能。如电脑usb接口,是为了实现拓展功能的。
(6)练习:
A:猫狗案例,加入跳高功能
代码:
//定义跳高接口(因为动物调高属于扩功能)
interface Jump{
	public abstract void jump();
}


//定义抽象类,因为动物具有共性,就把共性定义在抽象类中
abstract  class Animal{
	//定义成员变量
	private String name;
	private int age;
	
	//构造方法
	public Animal(){}
	public Animal(String name,int age){
		this.name=name;
		this.age=age;
	}	
	
	public String getName(){
		return name;
	}
	public int getAge(){
		return age;
	}
	//定义抽象方法,因为不同动物吃的东西不一样。
	public abstract void eat();
	
	//定义共有方法
	public void sleep(){
		System.out.println("动物都要睡觉");
	}
}


//定义猫类继承动物类
class Cat extends Animal{
	//构造方法
	public Cat(){}
	public Cat(String name,int age){
		super(name,age);
	}	
	
	//重写父类的抽象方法。
	public void eat(){
		System.out.println("猫吃鱼");
	}	
}


//定义狗类继承动物类
class Dog extends Animal{
	//构造方法
	public Dog(){}
	public Dog(String name,int age){
		super(name,age);
	}	
	
	//重写父类的抽象方法。
	public void eat(){
		System.out.println("狗吃骨头");
	}	
}


//定义会跳高的猫实现调高类
class JumpCat extends Cat implements Jump{
	public JumpCat(){}
	public JumpCat(String name,int age){
		super(name,age);
	}
	
	public void jump(){
		System.out.println("跳高猫会跳高");
	}
}


//定义会跳高的狗实现调高类
class JumpDog extends Dog implements Jump{
	public JumpDog(){}
	public JumpDog(String name,int age){
		super(name,age);
	}
	
	public void jump(){
		System.out.println("跳高狗会跳高");
	}
}


class Test{
	public static void main(String[]args){
		//创建会跳高的猫对象。
		JumpCat c=new JumpCat("哆啦A梦",2);
		System.out.println(c.getName()+"----"+c.getAge());
		c.eat();
		c.sleep();
		c.jump();
	}
}



B:老师和学生案例,加入抽烟功能
a,分析:从具体到抽象
老师:姓名,年龄,吃饭,睡觉。
学生:姓名,年龄,吃饭,睡觉。
由于有共性功能,我们提出出一个父类,人类。


人类:
成员变量:姓名,年龄
抽象方法:吃饭();
成员方法:睡觉(){}
由于抽烟的额外功能不是每个学生或者老师都有,所以我们把抽烟这种拓展功能定义为接口。

抽烟接口
部分老师抽烟:实现抽烟接口。
部分学生抽烟:实现抽烟接口。
b,实现:从抽象到具体代码。
c,使用:具体。

黑马程序员----java基础---抽象类和接口,附相关面试题

标签:java面试题   抽象类   接口   java基础   

原文地址:http://blog.csdn.net/qiushi_1990/article/details/46436909

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!