@[toc]
> 封装
1、概念: 将类的某些信息隐藏在类的内部,不允许外部程序访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。 2、好处: a.只能通过规定的方法访问数据 b.隐藏类的实例细节,方便修改和实现 3、封装的实现步骤 ①修改属性的可见性——设为private ②创建getter/setter方法,用于属性的读写 ③在getter/setter方法中加入属性控制语句,对属性值的合法性进行判断
> 继承
继承是类与类的一种关系,例如:动物和狗的关系,动物是父类(或基类),狗是子类(或派生类
)。 要注意的是,在Java中的继承是单继承,也就是说一个儿子只能有一个爸爸 继承的好处: 子类拥有父类的所有属性和方法(private除外) 子类对父类代码的复用 继承的语法规则: class 子类 extends 父类 #如: class Dog extends Animal{ ...... } 方法的重写: 1、什么是方法的重写: 如果子类对继承父类的方法不满意,是可以重从写父类继承的方法,当调用时会优先调用子类的方法。 2、语法规则: 返回值类型、方法名、参数类型及个数 都要与从父类继承的方法相同,才叫方法的重写。 继承的初始化顺序: 若创建一个子类对象,系统会先创建父类的属性进行初始化,再调用父类的构造方法,然后再创建子类的属性进行初始化,最后调用子类的构造方法。
> 多态
多态是同一个行为具有多个不同表现形式或形态的能力。
多态的优点
- 消除类型之间的耦合关系
- 可替换性
- 可扩充性
- 接口性
- 灵活性
- 简化性 多态存在的三个必要条件 继承 重写 父类引用指向子类对象
多态指对象的多种引用形态,继承是多态的前提 1、引用多态 父类的引用可以指向本类对象 Animal object1=new Animal(); 父类的引用可以指向子类对象 Animal object2=new Dog(); 注意:子类的引用不可以指向父类对象Dog object3=new Animal(); 2、方法多态 创建本类对象时,调用的方法为本类的方法; 创建子类对象时,调用的为方法为子类重写的方法或者继承的方法 注意:本类对象不能调用子类的方法
其它
引用类型转换:
Dog dog=new Dog();
Animal animal=dog(); //向上类型转换:(不存在风险)
Dog dog2=(Dog)animal; //向下类型转换:(存在风险,可能出现数据溢出)
if(animal instenceof Cat){ //用instanceof运算符,来解决引用对象的类型,避免类型转换的安全问题,返回布尔值,来判断animal能否转换为Cat类型
Cat cat=(Cat)animal;
}
抽象类: 规定子类必须实现某些方法,但不关注实现细节
a.abstract定义抽象类 b.abstract定义抽象方法,只有声明,不需要实现,如:public abstract void demo(); //直接使用分号结尾即可,不能有{ } c.包含抽象方法的类一定是抽象类(abstract) d.抽象类中可以包含普通的方法,也可以没有抽象方法 e.抽象类不能直接创建对象,可以定义引用变量 f.抽象类的子类必须实现父类中的所有抽象方法
接口:intreface 接口可以理解为一种特殊的类,由全局常量和公共的抽象方法组成 接口定义了类所需要遵守的规范,接口中的方法类中都必须提供 接口可以有多个父接口 接口一般是需要被继承和实现的,所以通常用public修饰,不能用protect和private 语法: [修饰符] interface 接口名 [extends 父接口1,父接口2,父接口3....] { //如果接口或者接口内的方法不手动添加 abstract ,系统也会默认为abstract 零到多个常量定义... 零到多个抽象方法的定义... }
通过类使用接口:implements [修饰符号] class 类名 extends 父类 implements 接口1,接口2...{ ... }
实现接口的多种方法:
1、IAnimal demo = new Cat();
demo.eat();
2、Cat demo = new Cat(); demo.eat();
3、(用匿名内部类的方式1)
IAnimal demo = new IAnimal(){
public void eat(){
System.out.println("eat");
}
};
4、(用匿名内部类的方式2)
new IAnimal(){
public void eat(){
System.out.println("eat");
}
}.eat();