一:面向对象的三大特性
1.1继承
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
继承的语法:
class 父类 {}
class 子类 extends 父类 {}
注意:
java中支持多重继承:
public class A(){...}
public class B extends A(){...}
public class C extends B(){...}
但不支持多继承
public class A(){...}
public class B(){...}
public class C extends A,B(){...} //不支持,报错
继承的特性
1. 子类拥有父类非 private 的属性、方法。
2. 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
3. 子类可以用自己的方式实现父类的方法。
4. Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,
多重继承就是,例如 A 类继承 B 类,B 类继承 C 类,所以按照关系就是 C 类是 B 类的父类,B 类是 A 类的父类(这是 Java 继承区别于 C++ 继承的一个特性)。
5. 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)。
1.2封装
封装性:实现细节部份包装、隐藏起来的方法。
封装的优点:
1.良好的封装能够减少耦合。
2.类内部的结构可以自由修改。
3.可以对成员变量进行更精确的控制。
4.隐藏信息,实现细节
实现封装的步骤:
1.修改属性的可见性来限制对属性的访问(一般限制为 private)。
2.对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问。
1.3多态
多态:一种是编译时多态,另外一种是运行时多态,编译时多态是通过方法的重载来实现的,运行时多态是通过方法的重写来实现的。
public class A(){
public void haha(){
System.out.println("hello lh");
}
}
public class B extends A(){
//多态的写法
A a = new B();
a.haha();
}
二:类
1.1类的创建
类的定义格式:
class 类名称{
成员属性
成员方法
}
2,注意事项
类必须编写在.java文件中。
一个.java文件中, 可以存在N个类, 但是只能存在一个public修饰的类。
.java文件的文件名称 必须 与public修饰的类名 完全一致;
三:方法
1.1方法定义
修饰符 返回值类型 方法名(参数类型 参数名){
方法体
return 返回值;
}
方法包含一个方法头和一个方法体。下面是一个方法的所有部分:
**修饰符:修饰符这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
**返回值类型 :方法可能有返回值。如果没有返回值,这种情况下,返回值类型应设为 void。
**方法名:是方法的实际名称。方法名和参数表共同构成方法签名。
**参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
**方法体:方法体包含具体的语句,定义该方法的功能
1.2方法的调用
Java 支持两种调用方法的方式,根据方法是否返回值来选择。
当方法返回一个值的时候,方法调用通常被当做一个值。例如:
int larger = max(30, 40);
如果方法返回值是 void,方法调用一定是一条语句。例如,方法 println 返回 void。下面的调用是个语句:
System.out.println("Hello World");
1.3构造方法
每个类都有构造方法。如果没有显式地为类定义任何构造方法,Java 编译器将会为该类提供一个默认构造方法。
在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。
public class Puppy{
//类默认有的构造方法
public Puppy(){
}
public Puppy(String name){
// 这个构造器仅有一个参数:name
}
}
四:访问权限关键字
访问权限控制的等级,从最大权限到最小权限依次为:
public > protected > default(没有任何关键字)> private
五:接口
接口,不能实例化;不能包含任何非常量成员,任何 field 都是隐含着 public static final 的意义;同时,没有非静态方法实现,也就是说要么是抽象方法,要么是静态方法。
java中实现接口的关键字是implements,如果实现了接口,就要实现接口中的全部方法,否则报错
六:抽象类
抽象类是不能实例化的类,用 abstract 关键字修饰 class,其目的主要是代码重用。除了不能实例化,形式上和一般的 Java 类并没有太大区别,可以有一个或者多个抽象方法,也可以没有抽象方法。抽象类大多用于抽取相关 Java 类的共用方法实现或者是共同成员变量,然后通过继承的方式达到代码复用的目的。
1.抽象类不能被实例化,如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。
2.抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
3.抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。
4.构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
5.抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。