心得感悟
今天講的內(nèi)容真的很少了搪桂,但我還是花了很多時(shí)間才能理解。我一開始覺得抽象類能做到的描扯,普通類也能做的定页,并不能理解抽象類的優(yōu)點(diǎn)。后面多方查閱資料還有問同學(xué)绽诚,才明白原來抽象類如此便捷好用典徊。了解了抽象類和接口的區(qū)別后杭煎,才發(fā)現(xiàn)原來它們這么相似,只要弄懂其中一個(gè)宫峦,肯定也能弄懂另一個(gè)岔帽。有的時(shí)候一個(gè)例子看不懂沒關(guān)系,再多找點(diǎn)例子导绷,總能看懂的犀勒。
1. 目的
- 一、掌握抽象類的概念及用法
- 二妥曲、掌握接口的概念及用法
2. 內(nèi)容簡概
- 一贾费、抽象類的定義及用法
- 二、接口的定義及用法
- 三檐盟、抽象類和接口的區(qū)別
3. 具體內(nèi)容
-
一褂萧、抽象類的定義及用法
1.概念:
抽象類是用來管理一些抽象內(nèi)容的類。簡單的說葵萎,使用了關(guān)鍵詞abstract
聲明的類叫作“抽象類”导犹。其中用abstract
修飾的方法叫做“抽象方法”。抽象方法與一般方法的不同之處在于羡忘,抽象方法只對方法作出聲明谎痢,但并沒有具體的實(shí)現(xiàn)內(nèi)容。
2. 定義規(guī)則:
(1) 抽象類和抽象方法必須用abstact
關(guān)鍵字來修飾卷雕。
(2)抽象方法定義時(shí)节猿,只需要聲明,不需要實(shí)現(xiàn)
(3)含抽象方法的類必須被聲明為抽象類
(4)抽象類的子類必須實(shí)現(xiàn)所有的抽象方法后漫雕,才能被實(shí)例化滨嘱,若不想實(shí)現(xiàn)抽象方法,就定義它為抽象類浸间,否則會報(bào)錯(cuò)太雨。
(5)不能被實(shí)例化。如下面這個(gè)例子魁蒜,運(yùn)行時(shí)會報(bào)錯(cuò)躺彬,抽象方法是不能被實(shí)例化的。
public class MyClass {
public static void main(String[] args){
Person xw = new Person();//實(shí)例化
}
}
abstract class Person{
String name;
public Person(String name){
this.name = name;
System.out.println(this.name);
public abstract void work();
}
如果非要用梅惯,只能通過使用匿名類來調(diào)用抽象類宪拥,且這樣的調(diào)用只能使用一次。即將上面代碼中的
Person xw = new Person();
改為如下代碼铣减,必須使用抽象類中的抽象方法她君。
Person xw = new Person(name:"小王"){
@Override
public void work() {};
}
3. 什么時(shí)候用到抽象類?
我舉一個(gè)實(shí)際的例子葫哗,一個(gè)幾何圖形的類缔刹,它們都有一些相同的屬性如:長球涛、寬,都有周長校镐、面積等方法亿扁,但是不同的圖形有不同的計(jì)算周長、面積的公式鸟廓,也就是說从祝,同種方法有不同的實(shí)現(xiàn)代碼,這時(shí)就需要用到抽象類和抽象方法引谜。且抽象類和繼承緊密相關(guān)牍陌,
4. 抽象類和抽象方法的具體用法
(1)首先,我們創(chuàng)建一個(gè)管理圖形Shape
的抽象類
public abstract class Shape
{
public int width; //幾何圖形的長
public int height; //幾何圖形的寬
public Shape(int width,int height)
{
this.width = width;
this.height = height;
}
public abstract double area(); //定義抽象方法员咽,計(jì)算面積
}
(2)然后定義一個(gè)正方形類毒涧,該類繼承
Shape
類
public class Square extends Shape
{
public Square(int width,int height)
{
super(width,height);
}
//重寫父類中的抽象方法,實(shí)現(xiàn)計(jì)算正方形面積的功能
@Override
public double area()
{
return width*height;
}
}
(3)再定義一個(gè)三角形類贝室,該類同樣繼承
Shape
類
public class Triangle extends Shape
{
public Triangle(int width,int height)
{
super(width, height);
}
//重寫父類中的抽象方法契讲,實(shí)現(xiàn)計(jì)算三角形面積的功能
@Override
public double area()
{
return 0.5*width*height;
}
}
(4) 最后創(chuàng)建一個(gè)測試類,分別創(chuàng)建正方形類和三角形類的對象滑频,并調(diào)用各類中的 area() 方法怀泊,打印出不同形狀的幾何圖形的面積。
public class ShapeTest
{
public static void main(String[] args)
{
Square square = new Square(5,4); //創(chuàng)建正方形類對象
System.out.println("正方形的面積為:"+square.area());
Triangle triangle = new Triangle(2,5); //創(chuàng)建三角形類對象
System.out.println("三角形的面積為:"+triangle.area());
}
}
(5)運(yùn)行結(jié)果如下:
正方形的面積為:20.0
三角形的面積為:5.0
-
二误趴、接口的定義及用法
1. 概念:
接口(interface)就是定義一套方法/規(guī)則,用于對象之間的通信务傲。有點(diǎn)類似于房屋中介或者USB凉当,就是用于連通雙方,并且規(guī)定以什么樣的形式連通售葡。比如房屋中介會制定好雙方的見面時(shí)間看杭,要求收取中介費(fèi)等。而USB會規(guī)定兩樣電器間只能傳輸文件或者只能查看信息等挟伙。同樣的楼雹,我們可以規(guī)定接口的方法。
2. 定義規(guī)則:
(1)可以定義內(nèi)部類
(2)不能定義變量
(3)不能定義代碼塊
(4)不能添加普通/對象/實(shí)例方法
(5)不能定義構(gòu)造方法尖阔,只有抽象方法
(6)使用implements實(shí)現(xiàn)一個(gè)接口
(7)默認(rèn)的變量都是static final 常量
(8)一個(gè)類可以實(shí)現(xiàn)多個(gè)接口贮缅,一個(gè)接口可以繼承多個(gè)接口
3. 什么時(shí)候用到接口?
就我目前的理解中介却,接口是面向?qū)ο髸r(shí)會用到的谴供。比如手機(jī)的操作界面,當(dāng)用戶點(diǎn)擊屏幕時(shí)齿坷,就需要一個(gè)接口來連通點(diǎn)擊事件和被點(diǎn)擊的應(yīng)用軟件桂肌。再比如手機(jī)通過數(shù)據(jù)線傳輸文件或者查看信息数焊,接口用來連接傳輸者和手機(jī),相當(dāng)于數(shù)據(jù)線崎场。
4. 接口的具體用法
(1)就上一點(diǎn)中的例子展開分析佩耳。首先,我們聲明一個(gè)USB
接口谭跨,接口規(guī)定必須接口的兩個(gè)對象必須實(shí)現(xiàn)read()和write()這兩個(gè)方法干厚。
interface USB{
//public abstract
void read();
//public abstract
void write();
}
(2)然后我們定義一個(gè)手機(jī)的類和電腦的類來實(shí)現(xiàn)這個(gè)USB接口,實(shí)現(xiàn)就是去用它饺蚊。
class Computer implements USB{
@Override
public void read() {
System.out.println("電腦正在通過USB功能讀取數(shù)據(jù)");
}
@Override
public void write() {
System.out.println("電腦正在通過USB功能寫入數(shù)據(jù)");
}
}
class Phone implements USB{
@Override
public void read() {
System.out.println("手機(jī)正在通過USB功能讀取數(shù)據(jù)");
}
@Override
public void write() {
System.out.println("手機(jī)正在通過USB功能寫入數(shù)據(jù)");
}
}
(3)最后我們定義一個(gè)主類來看看運(yùn)行效果
public class Test{
public static void main(String[] args){
Computer computer = new Computer();
computer.read();
computer.write();
Phone phone = new Phone();
phone.read();
phone.write();
}
}
(4)運(yùn)行結(jié)果如下:
電腦正在通過USB功能讀取數(shù)據(jù)
電腦正在通過USB功能寫入數(shù)據(jù)
手機(jī)正在通過USB功能讀取數(shù)據(jù)
手機(jī)正在通過USB功能寫入數(shù)據(jù)
-
三萍诱、抽象類和接口的區(qū)別
抽象類和接口里面都有抽象方法,不知道你會不會有一種感覺污呼,雖然它們的關(guān)鍵字不同裕坊,但感覺它們兩個(gè)很相似。如果你對此感到困惑或者容易混淆二者燕酷,可以點(diǎn)擊以下網(wǎng)頁查看講解籍凝,我認(rèn)為這個(gè)網(wǎng)頁中的講解還是很清晰明了的。
?
4. 親手練一練
1. 俗話說實(shí)踐出真知苗缩,紙上談兵不如親自刀槍上陣饵蒂,可以在下面的在線代碼運(yùn)行界面自己運(yùn)行一下,還可以改改代碼酱讶,便于加深理解退盯。
(1)抽象類的用法
(2)接口的用法