Java学习第七天:
面向对象的三大特点:封装、继承、多态
一、封装
封装——面向用户更简单,面向属性更安全。
private 私有的,保护起来。
class Dog{
private String name; //private修饰的对象表示私有只有本类中可以访问。
private int age;
public void setAge(int age){ //外部给里传值通过set方法
if(age>=1 && age <=12){
this.age=age;
}
}
//setName s小写,变量名首字母大写
public void setName(String name){
this.name=name;
}
public String getName(){ //外部要访问通过get方法
return name;
}
private boolean state;
public void setState(boolean state){
this.state=state;
}
public boolean isState(){ //布尔型用isState
return state;
}
private String[] types; //数组型
public void setTypes(String[] types){
this.types=types;
}
public String[] getTypes(){ //返回数组
return types;
}
public String getTypes(int index){ //返回数组下标
return types[index];
}
public void setTypes(int index,String type){ // 改变数组中下标为index的数为type
this.types[index]=type;
}
public Dog(String name,String[] types,boolean state){
this.name=name;
this.types=types;
this.state=state;
}
public Dog(){
}
}
class Test{
public static void main(String[] s){
Dog d=new Dog();
d.name=""; //错误访问方式,要使用 d.getName()方法
}
}
二、继承
继承就是代码的高效率复用
继承也可以说是产品的扩展和升级
继承等于拥有 当对私有不可访问
extends 继承关键字
对象=实例
父类 子类
超类 派生类
基类
class animal{ //父类
void sing(){
System.out.println("我是小白");
}
}
class dog extends animal{ //dog继承了animal的方法
}
}
public class ExtendsDemo {
public static void main(String [] s){
dog a = new dog();
a.sing();
}
}
三、多态
1、子类覆盖父类的方法
2、父类类型引用子类对象
子类可以演变成父类。
面向父类编程。
运行时多态性是面向对象程序设计代码重用的一个最强大机制,Java多态性的概念也可以被说成“一个接口,多个方法”。Java实现运行时多态性的基础是动态方法调度,它是一种在运行时而不是在编译期调用重载方法的机制。
要理解多态性,首先要知道什么是“向上转型”。
我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类。我可以通过
Cat c = new Cat();
实例化一个Cat的对象,这个不难理解。但当我这样定义时:
Animal a = new Cat(); 这代表什么意思呢?
很简单,它表示我定义了一个Animal类型的引用,指向新建的Cat类型的对象。由于Cat是继承自它的父类Animal,所以Animal类型的引用是可以指向Cat类型的对象的。那么这样做有什么意义呢?因为子类是对父类的一个改进和扩充,所以一般子类在功能上较父类更强大,属性较父类更独特,
定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。
所以,父类类型的引用可以调用父类中定义的所有属性和方法,而对于子类中定义而父类中没有的方法,它是无可奈何的;
同时,父类中的一个方法只有在在父类中定义而在子类中没有重写的情况下,才可以被父类类型的引用调用;
对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接。