面向物件-抽象類、介面、內部類
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();
}
}
抽象類:返回的是一個該抽象類的一個具體子類的物件。
介面:返回的是一個該介面的一個具體實現的類的物件。