一、面向对象核心

java三大特性
封装
封装:是面向对象的核心,将属性和方法(操作)封装在类中,然后通过类进行调用,这样很方便;
子类继承了父类的属性和方法;
将内部的一些细节进行屏蔽,方便大型项目的设计;
继承
继承:通过抽象,将所有的共性的东西进行抽象定义为父类,子类使用extends进行继承,方便代码的复用;
java只支持单继承但是可以允许多重继承;
object类:是所有一切类的父类,所有的类都是直接或者间接地继承该类;
getClass().getName(); //getClass()返回当前类的实例,然后使用object类中的 getNAME()方法返回类名; toString(); //返回类的字符串表示形式 s1.equals(s2); //比较两个对象的地址是否相同
在java中,如果声明的两个变量(不一定描述正确)的值相同,那么两个变量的地址就是相同,使用equals方法的时候就hi显示相同;
方法重写:方法重写和重载没有半毛钱关系,是在继承的时候,父类的某些方法并不适合子类,因此需要进行重写;(重写实现的内容,权限,返回值类型均可)。
方法重构:相较于方法重写,只有实现的内容部分不一样,其他的均相同。
super关键字:如果子类的变量和父类的变量或者方法相同的时候,正常调用会出现覆盖,这时使用super关键字来调用父类的方法或属性;
多态
一种定义,多种实现;
多态实现体现:
一、方法重载
方法名字相同,但是传递的形参的类型,数量,顺序不同,起源于构造方法;
二、上下转型
上转型:继承的时候是子类继承父类,那么将子类转成父类的时候,可以理解为从特殊到一般的过程,是安全的,例如:鸽子类继承鸟类,可以说鸽子是鸟;
上转之后的对象只能操作父类的方法和变量,子类独有的属性和方法是不能调用的;
如果子类重写了父类的方法,上转之后,父类调用的方法是子类的方法;
下转型:是从一般到特殊的过程,该方式通常是不安全的;
子类首先转成父类,然后父类再转成子类的时候需要强制转换,如果直接将父类实例赋值子类对象对报错;
instanceof关键字:判断某一个父类是否是子类的实例,返回值是布尔类型;
抽象类和接口
抽象类
在现实世界中,有时候我们无法用语言具体描述某些事物的时候,可以使用抽象类,
使用abstract定义;
抽象方法不能直接实例化,被继承的时候,要重写所有的抽象方法,除非抽象类继承抽象类,不需要。
接口
接口是抽象的延伸,接口中所有的方法没有方法体都是抽象方法;
使用interface关键字定义,首字母大写(约定俗成);
类通过implements关键字实现接口,必须重写接口中所有的方法;
一个类可以多重继承多个接口,但是会造成代码量大,程序复杂;
一个接口可以继承多个接口;
两者区别:(常规区别不说)
抽象类中的成员变量可以是任意类型,接口中的成员变量只能是静态常量;
抽象类中可以有静态代码块和方法,接口不行;
抽象类可以有构造方法,接口没有构造方法;
访问控制
private:在本类中有效
default:在同一个包中有效
protected:在其他包的子类
public:整个项目中都有效
使用原则:
package关键字:主要是为了控制类重名冲突问题,方便管理文件;
在调用包中的方法的时候,需要先用import包导入;
final关键字:修饰变量不允许改动(也叫常量),修饰方法的时候不允许重写;
内部类
如果一个类在另外一个类中是成员,那么就是内部类;
意义:开发程序的模型变成了“组合”的形式,例如:汽车类中组合了发动机类,车轮类等等,这样能够更好开发程序;
成员内部类:
将内部类作为一个外部类中的成员,在初始化的外类的时候,内部类就和外部类进行了绑定,调用内部类中的变量或方法的时候就要 “一点再点”。
匿名内部类:
只使用一次,创建实例后消失,
没有构造方法;
不能有静态成员;
只能用默认权限修饰符,不能用final,static,abstract修饰
abstract class OutClass{ abstract void say(); } public class TestInClass { public static void main(String[] args) { new OutClass() { void say() { System.out.println("内部类测试"); } }.say(); } }
浙公网安备 33010602011771号