JavaOPP
第一章:对象和封装
1、使用面向对象进行程序设计
三部分:
1、发现类
2、发现类的属性
3、发现类的方法
抽象时遵循的原则如下:
1、属性和方法的设置是为了解决业务问题
2、关注主要属性和方法
3、如没有必要,勿增加额外的类、属性与方法
2、创建类和对象
类主要由属性和行为组成,属性和行为又称为成员变量和成员方法,统称为成员
java中创建对象、调用属性及方法
1、通过构造方法了创建对象
2、通过对象名.属性名的方式调用属性
3、通过对象名.方法名的方式调用方法
类和对象是面向对象中的辆核心概念
类名、属性名、方法名及常量名的命名规范如下:
1、类名由一个或几个单词组成,每个单词第一个字母大写
2、属性名和方法名由一个或几个单词组成,第一个单词字母小写,其他单词字母大写
3、常量名由一个或几个单词组成,所有字母大写
3、构造方法及其重载
Java可以像C#一样,通过无参或带参的构造方法完成赋值的初始化工作
方法重载的判断如下:
1、必须在同一个类里
2、方法名相同
3、参数列表不同
4、与方法返回值和方法修饰符没有任何关系
在使用this调用自身的其他构造方法时,只能作为第一条语句
4、static修饰符
static可以用来修饰属性、方法和代码块。static 修饰的变量属于这个类所有,即由这个类创建的所有对象共用同一个static变量。通常把static修饰的属性和方法称为类属性(类变量)和类方法。不使用static 修饰的属性和方法属于单个对象,通常称为实例属性(实例变量)和实例方法
静态方法中不能使用this和super关键字
在方法里面不可以定义static变量
5、封装
通过private、protected、 public 和默认权限的控制符来实现权限的控制
1、封装是面向对象的三大特性之一,就是将类的状态信息隐藏在类内部,不允许外部程序直接访问,而通过该类提供的方法来实现对隐藏信息的操作和访问。
2、封装的具体步骤:修改属性的可见性来限制对属性的访问:为每个属性创建一对赋值 (setter)方法和取值(getter) 方法,用于对这些属性的存取:在赋值方法中,加入对属性的存取控制语句。
3、封装的好处:隐藏类的实现细节,让使用者只能通过程序规定的方法来访问数据,可以方便地加入存取控制语句,限制不合理操作。
封装时会用到多个权限控制符来修饰成员变量和方法,区别如下。
1、private: 成员变量和方法只能在其定义的类中被访问,具有类可见性。
2、默认:成员变量和方法只能被同一个包里的类访问,具有包可见性。
3、protected: 可以被同一个包中的类访问,被同一个项目中不同包中的子类访问。
4、public:可以被同一个项目中的所有类访问,具有项目可见性,这是最大的访问权限
第二章:继承
1、继承
语法:
修饰符 SubClass extends SuperCalss{
//类定义部分
}
继承通过extends关键字来实现,其中的SubClass称为子类,SuperClass 称为父类、基类或超类。修饰符如果是public, 则该类在整个项目中可见: 若无public修饰符,则该类只在当包可见;不可以使用private和protected修饰类
继承是面向对象的三大特性之一,是Java中实现代码重用的重要手段之一。Java中只支持单继承,即每个类只能有一个直接父类
子类可以从父类中继承到那些:
1、继承 public和protected修饰的属性和方法,无论子类和父类是否在同一个包里。
2、继承默认权限修 饰符修饰的属性和方法,但子类和父类必须在同一个包里。
3、无法继承private修饰的属性和方法。
4、无法继承父类的构造方法。
访问修饰符:
访问修饰符 | 本类 | 同包 | 子类 | 其他 |
---|---|---|---|---|
Private | √ | × | × | × |
默认 | √ | √ | × | × |
Protected | √ | √ | √ | × |
Public | √ | √ | √ | √ |
2、子类重写父类方法
在子类中可以根据需求对从父类继承的方法进行重新编写,称为方法的重写或方法的覆盖。方法重写必须满足如下要求。
1、重写方法和被重写方法必须具有相同的方法名
2、重写方法和被重写方法必须具有相同的参数列表
3、重写方法的返回值类型必须和被重写方法的返回值类型相同或是子类
4、重写方法不能缩小被重写方法的访问权限
3、继承关系中的构造方法
继承条件构造得到的调用规则如下:
1、如果子类的构造方法中没有通过super显示调用父类的有参构造方法,也没有通过this显示调用自身的其他构造方法则系统会默认先调用父类的无参构造方法。在这种情况下,有没有“super();”语句,效果都是一样的
2、如果子类的构造方法中通过super显示调用父类的有参构造方法,则将执行父类相应的构造方法,而不执行父类无参构造方法
3、如果子类的构造方法中通过this显示调用自身的其他构造方法,则在相应构造方法中应用以上两条构造
4、特别注意的是,如果存在多级继承关系,则在创建一个子类对象时,以上规则会多次向更高一级父类应用,一直到执行顶级父类Object类的无参构造方法为止
4、抽象
抽象类和抽象方法的特点如下:
1、抽象类不能实例化。抽象类中可以没有、有一个或多个抽象方法,甚至全部方法都可以是抽象方法。
2、抽象方法只有方法声明,没有方法实现。有抽象方法的类必须声明为抽象类。子类必须重写所有的抽象方法才能实例化,则子类还是一个抽象类
3、抽象类可以包含实例方法,也可以有抽象方法
5、final修饰符
1、用final修饰符的类,不能再被继承
2、用final修饰符的方法不能被子类重写
3、用final修饰的变量将保存常量,只能赋值一次
第三章:多态
1、什么是多态
多态是具有表现多种形态的能力的特征。更专业化的说法:同一个实现接口,使用不同的实现而执行不同的操作
子类转换成父类时的规则:
1、将一个父类的引用指向一个子类对象,称为向上转型,自动进行类型转换
2、此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法,不是父类的方法
3、此时通过父类引用变量无法调用子类特有的方法
2、使用父类作为方法返回值实现多态
父类到子类的转换。同时,会使用instanceof运算符来判断对象的类型
3、父类到子类的转换
将一个指向子类对象的父类引用赋给一个子类的引用,称为向下转换。此时必须进行强制类型转换
4、instanceof运算符
语法:
对象 instanceof 类或接口
instanceof通常和强制类型转换结合使用
第四章:接口
1、什么是接口
语法:
[修饰符] interface 接口名 extends 父接口1,父接口2,......{
//常量定义
//方法定义
}
class 类名 extends 分类名 implements 接口1,接口2.....{
//类成员
}
接口同样是一种规范和标准,它们可以约束类的行为,是一些方法的集合但是没有方法的实现
1、接口的命名规则与类相同。如果修饰符是public,则该接口在整个项目中可见;如果省略修饰符,则该接口只在当前包可见
2、接口中可以定义常量,不能定义变量。接口中的属性都会自动用public static final修饰,即接口中的属性都是全局静态常量。接口中的常量必须在定义时指定初始值
3、接口中所有方法都是抽象方法。接口中方法都会自动用public abstract修饰,即接口中只有全局抽象方法
4、和抽象类一样,接口也不能实例化,接口中不能有构造方法
5、接口之间可以通过extends实现继承关系,一个接口可以继承多个接口,但接口不能继承类
6、接口的实现类必须实现接口的全部方法,否则必须定义为抽象类
2、接口表示一种能力
接口不仅弥补了Java只支持单继承的缺点,还利于代码的扩展和维护。接口类似于一个组件,需要时可以自由组装。从使用角度来讲,接口和抽象类的区别在于:抽象类利于代码复用,接口利于代码维护
3、接口表示一种约定
接口体现了约定和实现相分离的原则,通过面向接口编程,可以降低代码间的耦合性,提高代码的可扩展性和可维护性。面向接口编程就意味着:开发系统时,主体构架接口,接口构成系统的骨架,这样就可以通过更换实现接口的类来实现更换系统
4、在C#中使用接口
语法:
[修饰符] interface 接口名 extends 父接口1,父接口2,......{
常量定义
方法定义
}
class 类名:父类名 接口1,接口2.....{}
声明:
1、接口之间可以通过冒号“:”来实现继承关系,一个接口可以继承多个接口,但接口不能继承类。类只能继承一个父类,但可以实现多个接口,使用冒号“:”来继承类并实现接口
2、接口定义零个或多个成员,成员主要是方法、属性和索引器。接口中不能包含常量、变量或构造方法,也不能包含任何静态成员
3、接口中成员访问权限是public,定义接口时显式指定任何修饰符都是非法的
4、按照惯例,C#中接口的名称以大写字母"I"开头