面向对象编程二

本文介绍了多态的概念及其在Java中的应用,包括对象和行为多态,以及如何通过父类引用和方法重写实现。还探讨了final和常量的作用,抽象类、模板方法模式和接口的使用,以及JDK8后接口的扩展和多继承注意事项。
摘要由CSDN通过智能技术生成

一,多态,使用多态的好处

多态

1.多态:是在继承/实现情况下的一种现象,表现为:对象多态,行为多态

 People p1=new Student();
 p1.run();
 People p2=new Teacher();
 p2.run();

2.多态前提

有继承/实现关系,存在父类引用子类,存在方法重写

3.多态注意事项

多态是对象,行为的多态,Java中的属性(成员变量)不谈多态

4.好处?问题?

(1)可以解耦合,扩张性更强;使用父类类型变量作为方法发的形参,可以接收一切子类对象

         Student s1=new Student();
         go(s1);
         Teacher t1=new Teacher();
         go(t1);
    }
    public static void go(People p){
}

(2)多态下是不能直接用子类独有的方法的

类型转换

1.类型转换形式?解决问题?

(1)自动类型转换,强制类型转换

(2)可以把对象转换成其真正的类型,从而解决了多态下不能调用子类独有方法的问题

//p1,p2均为Peaple 自动类型转换
People p2=new Teacher();
People p1=new Student();
Student p1= (Student) p;
Teacher p2= (Teacher) p;

2.强制类型转换需要注意什么?

存在继承/实现时就可以进行强制类型转换,编译阶段不会报错

但运行时会报错ClassCastException

3.强制类型转换前,Java建议?

使用instanceo判断当前对象真是类型

public static void go(People p){
//p1,p2均为Peaple 自动类型转换
        if(p instanceof Student){
            Student p1= (Student) p;
            p1.test();//test学生类独有方法
        }else if (p instanceof Teacher){
            Teacher p2= (Teacher) p;
            p2.teacher();//teacher老师类都有方法

        }
    }

二,final,常量

final

1.final

(1)final关键字是最终的意思,可以修饰类方法,变量

(2)final修饰类,类就不能被继承了

(3)final修饰方法,方法就不能重写了

(4)final可以修饰变量总规则,有且只有一次

2.修饰变量注意事项

(1)final修饰基本数据类型的变量,变量存储的数据不能变

(2)final修饰引用类型的变量,变量存出的地址不能变,但地址所指的对象的内容可以改变

final int[] arr={11,12};
       // arr=null;
        arr[1]=222;

常量

1.常量

(1)使用static final 修饰的成员变量就被称为常量

(2)作用:通常用于记录系统的配置信息

public class Test {
    //常量 public static final修饰的成员变量,建议名称全部大写,多个单侧下划线
    public static final String SCHOOL_NAME="黑马";

    public static void main(String[] args) {
        System.out.println(SCHOOL_NAME);
}
}

2.使用常量记录系统配置信息的优势,执行原理

(1)代码可读性好,可维护性好

(2)程序编译后,常量会被"宏代替",出现常量的地方全部会被替换成其记住的字面量,

这样可以保证使用常量和使用字面量的性能是一样的

三,抽象类认识好处

1.抽象类,抽象方法是什么样?

都是用abstract修饰的;抽象方法只有方法签名,不能写方法体

2.注意事项特点

(1)抽象类中可以不写抽象方法,但是抽象方法的类一定是抽象类

(2)类有的成员(成员变量,方法,构造器)抽象类都具备

(3)抽象类不能创建对象,仅作为一种特殊的父类,让子类继承并实现

(4)一个类继承抽象类,必须重写抽象类的全部抽象方法,否则这个类也必须定义成抽象类

3.抽象类的应用场景

父类知道每个子类都要做某个行为,但每个子类要做的情况不一样,父类就定义成抽象类,交个子类去重写实行,我们抽出这样的抽象类,就是为了更好的支持多态

四,抽象类-模板方法

1.模板方法设计模式解决问题?

解决方法中存在重复性代码的问题

2.模板方法设计模式应该怎么写?

(1)定义一个抽象类

(2)在里面设计两个方法,一个是模板方法,一个是抽象方法:具体实现交给子类完成

public abstract class People {
    public void write(){
     ...
    }
    public abstract String writeMain();
}
//子类:重写writeMain方法
/** public abstract String writeMain();
    return "...";
*/

3.模板方法建议

使用关键字修饰模板方法(防止改写)

五,接口-认识好处

1.接口好处

(1)可以解决类的单继承的问题,通过接口,我们可以让一个类有一个亲爹的同时,还可以找好几个干爹去拓展自己的功能

(2)一个类我们可以实现多个接口,同样,一个接口也可以被多个类实现,这样的好处是我们程序就可以面向接口编程了,切换各种业务

2.why

因为通过接口去找干爹,别人通过您implements的接口,就可以显示的知道你是谁

六,接口的多继承,注意事项(从jdk8开始)

1.JDK8,接口中新增了哪些方法?

(1)默认方法,使用default修饰,使用实现类的对象调用

(2)静态方法:static修饰,必须用当前接口调用

(3)私有方法:private修饰,jdk9才开始有的,只能在接口内部被调用

(4)他们都会默认被public修饰

2.jdk8开始,接口中为啥要增加这些方法

增加了接口的能力,要便于项目的扩展和维护

3.接口其他注意事项

(1)一个接口多个接口,如果多个接口中存在方法签名冲突,则此时不支持多继承

(2)一个类实现多个接口,如果多个接口中存在方法签名冲突,则此时不支持多实现

(3)一个类继承了父类,又同时实现了的接口,夫类和接口中同时的默认方法,实现类会优先使用父类的

(4)一个类实现了多个接口,多个接口中存在同名的默认方法,可以不冲突,这个类重写该方法即可

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值