繼承基本概念
extends,很好理解嘛,就是兒子繼承父親的屬性;所以父類有什麼,子類就有什麼屬性。
繼承實現的限制問題
規範:只能一次繼承一個父類!即在過程中一對一繼承!
子類實例化的過程
當使用new關鍵字實現類的時候,先調用父類的構造器再調用子類構造器。(因爲對象初始化就是構造函數的調用過程)
方法的覆寫
private<default<public private——>public default——>public 就是直接在子類中定義同樣的方法名並且擴大或者不動(父類>=子類)方法訪問權限,進而具體實現。 private——>default不算是方法的覆寫
super關鍵字
代表父類的意思,和this的意義差不多吧,但是需要注意的是,this在子類中找不到對於的方法和變量,將去父類中尋找。
package com.Example.chapter05;
/**
1. @author Administrator
2. @function : 繼承的初步理解
*/
public class ExtendsDesign {
public static void main(String[] args) {
Student guangwei=new Student();
guangwei.setName("光唯");
guangwei.setAge(23);
guangwei.setSex("男");
System.out.println(guangwei.getName()+"\t\t"+guangwei.getAge()+"\t\t"+guangwei.getSex());
}
}
class Person{
private String name;
private int age;
private String sex;
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 String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
class Student extends Person{
}
- 抽象類abstract
package com.Example.chapter05;
/**
* @author Administrator
* @date : 2017年3月26日 下午9:53:27
* @function : 抽象類的瞭解
*/
public class AbstractDesign {
public static void main(String[] args) {
Demo2 A=new Demo2();
A.outPut();
}
}
abstract class Demo{
private int age=0;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
/*************抽象類********************/
public abstract void outPut();
}
class Demo2 extends Demo{
@Override
public void outPut() {
// TODO Auto-generated method stub
System.out.println("Demo2繼承抽象類Demo去實現實例化");
}
}
抽象類相當於“模板”,提供一個模板供子類去實現。
1. 有抽象方法的類必須是抽象類
2. 抽象類和抽象方法都必須用abstract修飾
3. 抽象方法不能具體實現
4. 抽象類需要子類去實例化
我們通過了解抽象類來和普通類進行區別一下,抽象類無非是需要abstract進行修飾,並且有抽象方法的類一定是抽象類。抽象類不一定必須要有抽象方法。
4.接口interface
接口是一種特殊的類;
package com.Example.chapter05;
/**
* @author Administrator
* @date : 2017年3月26日 下午10:07:55
* @function : 接口的理解
*/
public class InterfaceDesign {
public static void main(String[] args) {
Test t=new Test();
System.out.println(t.getAge()+"\t"+t.getSex());
}
}
class Test implements Demo1,Demo2{
@Override
public int getSex() {
// TODO Auto-generated method stub
return sex;
}
@Override
public int getAge() {
// TODO Auto-generated method stub
return age;
}
}
interface Demo1{
public static final int age=20;
public abstract int getAge();
}
interface Demo2{
public static final int sex=0;
public abstract int getSex();
}
在接口中,變量必須爲全局(static)常量(final);
方法必須爲抽象方法;與繼承不同的是可以多重接入接口;(最重要的是常量和方法默認和要求必須是public權限)
5. 對象的多態性(——–>多種形態)
1.方法的覆寫
(要把握覆寫和實現的區別,抽象類不能叫做覆寫)
2.上下轉型
對象是new出的在於堆內存中部分,
對象向上轉(數據類)型:父類類型 標識符=子類對象
對象向下轉(數據類)型:子類類型 標識符=(子類類型)父類對象(顯示轉換類型)
對象在向下轉型必須先向上轉型;
package com.Example.chapter05;
/**
* @author Administrator
* @date : 2017年3月27日 上午11:29:15
* @function : 主要是看重多態性的表現。上轉型和下轉型
*/
public class DifferentVisionDesign {
public static void main(String[] args) {
A a=new B();
a.outPut();
B b=(B)a;
b.outPut();
}
}
class A{
public void outPut(){
System.out.println("A類在此"+"\n---------------------------");
}
}
class B extends A{
public void outPut(){
System.out.println("B類在此"+"\n---------------------------");
}
}
常見設計模式
1.首先無疑是抽象類和接口的使用,他們先制定標準再給子類(extends,inmplements)具體實現。 2.制定標準
package com.Example.chapter05;
/**
* @author Administrator
* @date : 2017年3月27日 上午11:52:55
* @function : 制定標準
* 1.電腦接收USB接口
* 2.USB分爲盤和打印機
*/
public class DesignMode {
public static void main(String[] args) {
Computer worker=new Computer();
worker.start(new UDevice());
worker.start(new Printer());
}
}
class Computer{
public void start(USB device){
device.work();
device.finish();
}
}
interface USB{
public abstract void work();
public abstract void finish();
}
class UDevice implements USB{
@Override
public void work() {
// TODO Auto-generated method stub
System.out.println("U盤開始工作"+"\n--------------------------");
}
@Override
public void finish() {
// TODO Auto-generated method stub
System.out.println("U盤停止工作"+"\n--------------------------");
}
}
class Printer implements USB{
@Override
public void work() {
// TODO Auto-generated method stub
System.out.println("打印機開始工作"+"\n--------------------------");
}
@Override
public void finish() {
// TODO Auto-generated method stub
System.out.println("打印機停止工作"+"\n--------------------------");
}
}
3.工廠模式(產生一個工廠類,在裏面拿具體實例)
問題展示:
package com.Example.chapter05;
/**
* @author Administrator
* @date : 2017年3月27日 下午12:21:39
* @function : 工廠類理解
*/
public class FactoryDesign {
public static void main(String[] args) {
Personk instance=null;
instance=new man();
instance.say();
instance=new woman();
instance.say();
}
}
class Personk{
public void say(){
}
}
class man extends Personk{
@Override
public void say() {
// TODO Auto-generated method stub
System.out.println("男人說話女人不要插嘴");
}
}
class woman extends Personk{
@Override
public void say() {
// TODO Auto-generated method stub
System.out.println("女人說話男人不要插嘴");
}
}
所以很容易發現哦,在主方法中,每次去實例化一個類都要單獨去實現才能調用方法;而且這個實例完全是可以使用類似於單例模式(解決構造方法私有化);
package com.Example.chapter05;
/**
* @author Administrator
* @date : 2017年3月27日 下午12:21:39
* @function : 工廠類理解
*/
public class FactoryDesign {
public static void main(String[] args) {
Personk instance=null;
instance=new Factory().getInstacne("man");
instance.say();
}
}
class Factory{
public Personk instance=null;
public Personk getInstacne(String classname){
if(("man").equals(classname)){
this.instance=new man();
}else if(("woman").equals(classname)){
this.instance=new woman();
}
return this.instance;
}
}
class Personk{
public void say(){
}
}
class man extends Personk{
@Override
public void say() {
// TODO Auto-generated method stub
System.out.println("男人說話女人不要插嘴");
}
}
class woman extends Personk{
@Override
public void say() {
// TODO Auto-generated method stub
System.out.println("女人說話男人不要插嘴");
}
}
4.代理模式
Object類詳解
包裝類的作用以及自動裝箱和拆箱的操作
- 匿名內部類
final關鍵字
就此定義爲終結者。end of everything!一經定義不得修改!他可以用來修飾類。
11.instanceof關鍵字
判斷哪個對象是否屬於哪個實例; 對象 instanceof 類名 ——>boolean類型值