面向对象-抽象类、接口、内部类
1.抽象类
java中一个没有方法体的方法叫做抽象方法,而类中有抽象方法,该类只能定义为抽象类。
a.抽象类特点
1)抽象类和抽象方法都要用abstract关键字修饰。
格式:
abstract class 类名{}
public abstract void 方法名();
2)抽象类不一定有抽象方法,但抽象方法的类一定在抽象类。
3)抽象类不能实例化
抽象类多态,由具体的子类实例化。
4)抽象类的子类
要么是抽象类要么重写抽象类中所有的抽象方法。
b.老师教课案例
老师案例 具体事物:19级老师,20级老师 共性:姓名,年龄,讲课。
abstract class Teacher{
private String name;
private int age;
public Teacher(){}
public Teacher(String name,int age){
this.name = name;
this.age = age;
}
public void setName(String name){
this.name = name;
}
public void setAge(int age){
this.age = age;
}
public void getName(){
return name;
}
public void getAge(){
return age;
}
public abstract void teacher();
}
class NineteenTeacher extends Teacher{
public NineteenTeacher(){}
public NineteenTeacher(String name,int age){
super(name,age);
}
@override
public void teacher(){
System.out.println("这是19级老师教学语文。")
}
}
class TwentyTeacher extends Teacher{
public TwentyTeacher(){}
public TwentyTeacher(String name,int age){
super(name,age)
}
@override
public void teacher(){
System.out.println("这是20级老师教学英语。")
}
}
public class Test{
public static void main(String[] args){
Teacher t1 = new NineteenTeacher(name:"小王",age:18);
t1.teacher();
Teacher t2 = new TwentyTeacher(name:"小刘",age:19);
t2.teacher();
}
}
2.接口
为了体现事物功能的扩展性,Java中就提供了接口来定义这些额外功能,并不给出具体实现。
a.接口特点
1)接口用关键字interface表示
格式:
interface 接口名 {}
2)类实现接口用implements表示
格式:
class 类名 implements 接口名 {}
3)接口不能实例化
按照多态的方式,由具体的子类实例化。其实这也是多态的一种,接口多态。
4)接口的子类
要么是抽象类 要么重写接口中的所有抽象方法。
注意:成员变量只能是常量切默认修饰符 public static final
3.引用数据类型的数据参数和返回值。
a.数据参数
类:当类作为方法形式参数的时候,实际上需要的是该类的对象。
class Teacher{
public void show(){
System.out.println("我是老师。");
}
}
class TeacherTest{
public void fun(Teacher teacher){
teacher.show();
}
}
class Test2{
public static void main(String[] args){
TeacherTest t3 = new TeacherTest();
Teacher a = new Teacher();
t3.show(a);
}
}
抽象类:实际上需要的是该抽象类的子类的对象。
接口:实际上需要的是该接口具体实现的类。
b.返回值
类:实际上需要返回一个该类的对象。
class Student{
public void show(){
System.out.println("我是学生。");
}
}
class StudentTest{
public Student show2(){
return new Student();
}
}
class Test{
public static void main(String[] args){
StudentTest s1 = new StudentTest();
Student s2 = s1.show2();
s2.show();
}
}
抽象类:返回的是一个该抽象类的一个具体子类的对象。
接口:返回的是一个该接口的一个具体实现的类的对象。