1.面向对象--封装、继承、多态
封装
体现在:
- 私有成员变量,提供setXxx和getXxx方法
- 将代码抽取到方法中,这是对代码的一种封装
- 将属性抽取到类当中,这是对数据的一种封装
好处:全性、复安用性
static注意事件:
1.静态方法中,只能访问静态成员(成员变量,成员方法)
2.非静态方法中,可以使用静态成员,也可以使用非静态成员;
3.静态方法中,没有this关键字;
继承
Java的继承是单继承多实现,只能继承一个父类(如果不继承其他类,默认继承object类),但可以实现多个接口。子类可以直接使用父类中非私有的成员
- 格式:public class 子类名 extends 父类名{}
- super代表父类对象的引用
- java只支持单继承,不支持多继承,但支持多层继承
- new子类对象时,先新建父类对象,再新建子类对象,两者作为一个整体对象;调用成员时,先找子类,再找父类
- 如果父类中的方法为 private 类型的,那么子类虽能继承,但无法覆盖
- 子类拥有父类的所有非私有方法和属性,但可以不重写父类方法
好处:复用性、维护性、是多态的前提
super
- super()
构造方法中的第一条语句默认都是:super() 。
系统在每一个构造方法中,默认隐藏一句代码:super();
- Super.xxxx()
方法重写时,调用父类中同一个方法的代码
- Super(参数)
调用父类的构造方法,默认调用父类无参构造super(),手动调用有参构造super(),必须是首行代码
注意:super不能在静态方法中使用
抽象类
abstract class
抽象方法:将共性行为(方法)抽取到父类之后,发现该方法的实现逻辑无法在父类中给出具体明确,该方法就可以定义为抽象方法;
抽象类:如果一个类中存在抽象方法,那么该类就必须声明为抽象类
格式:
//抽象类
public abstract class Employee
{
private String name;
//其余成员
public abstract double computePay();
//其余代码
}
//子类
public class Salary extends Employee
{
private double salary; // Annual salary
public double computePay()
{
System.out.println("Computing salary pay for " + getName());
return salary/52;
}
//其余代码
}
- 抽象类不能实例化对象,所以抽象类必须被继承,才能被使用
抽象类不能实例化对象:{防止调用没有方法体的方法;}
- 抽象类中有构造方法
- 抽象类的子类:
- 必须要重写父类中的抽象方法;
- 可以把自己也变成抽象类;
- 抽象类中的方法
抽象类中可以没有抽象方法,但是抽象方法的类一定是抽象类
多态
void f (父类型 o1) { }
多态前提:
1:要有(继承\实现)关系
2.要有方法重写
3.要有父类引用,指向子类对象
父类名 对象名 =new 子类名();
好处:派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。
- 多态中转型存在的风险:
如果被转的引用类型变量,对应的实际类型和目标类型不是同一种类型,那么在转换的时候就会出现ClassCastException(类型转换错误)
- 避免强制转换出现的问题:
关键字:instanceof
使用格式:
变量名 instanceof 类型
( 理解:判断关键字左边的变量,是否是右边的类型,返回boolean类型结果)
- 多态的实现方式:
1.重写和重载
2.接口
3.抽象类和抽象方法
abstract class Animal {
abstract void eat();
}
class Cat extends Animal {
public void eat() {
System.out.println("吃鱼");
}
public void work() {
System.out.println("抓老鼠");
}
}
class Dog extends Animal {
public void eat() {
System.out.println("吃骨头");
}
public void work() {
System.out.println("看家");
}
}
//使用:
Animal animal = new Cat(); //向上转型
2.数组
int[] a = new int[6];
数组在堆内存。引用是在栈。
因为数组是一个引用类型。所以传递进去的是它们的引用,故在方法中互换了它们的值,也必然影响到它们原来的值.
数组是最为常见的一种数据结构,是相同类型的、用一个标识符封装到一起的基本类型数据序列或对象序列。可以用一个统一的数组名和下标来唯一确定数组中的元素。实质上,数组是一个简单的线性序列,因此访问速度很快。
数组是具有相同数据类型的一组数据的集合。在程序设计中,可以将这些集合称为数组。数组中的每个元素具有相同的数据类型。在Java中同样将数组看作一个对象,虽然基本数据类型不是对象,但由基本数据类型组成的数组却是对象。
Arrays 数组工具类
- Arrays.toString(数组) 把数组数据连接成字符串。
- Arrays.sort(数组) 数组排序 基本类型:优化的快速排序;引用类型:优化的合并排序。
- Arrays.binarySearch(数组,目标值)