面向对象的三大特征:封装、继承、多态
封装:隐藏了实现细节,对外提供可以访问的方式。
继承:在现有的基础上创建一个类,让一个类继承另一个类,被继承的类叫父类,继承的类叫子类。
多态:父类引用变量可以指向子类对象,配合继承与方法重写提高了代码的复用性与扩展性。
封装用private关键字 set()、 get()对外提供访问。
public class Person {
//private私有化
private String name;
private int age;
public void sd() {
//this关键字区分成员变量和局部变量
this.name = "光头强";
this.age = 18;
System.out.println("name=" + this.name + ",age=" + this.age);
}
//setName();getName()对外提供访问
public void setNamen(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setAge(int age){
if(age>=0&&age<=130){
this.age=age;
}else{
this.age=0;
}
}
public int getAge(){
return age;
}
public void speak() {
System.out.println("我叫"+name+",今年"+age+"岁了");
}
继承
继承格式:class 子类 extends 父类 {}
//extends关键字来实现继承
public class javaEE extends Developer{
public void print(){
System.out.println(name+"在写JavaEE代码");
}
在java中只支持单继承,不能多继承。
当子父类中出现了同名成员变量时,在子类中若要访问父类中的成员变量,必须使用关键字super来完成。
方法重写
//这是父类 public class Phone { public void show(){ System.out.println("显示电话号码"); } public void sendMssage(){ System.out.println("发短信"); } public void call(){ System.out.println("打电话"); } } ------------------------------------------------------- //子类 public class Iphone extends Phone{
//用super调用父类 public void show(){ super.show(); System.out.println("显示来电姓名"); System.out.println("显示头像"); } }
子类方法覆盖父类方法,必须要保证权限大于等于父类权限。
多态
多态格式:
父类类型 变量名 = new 子类类型();
变量名.方法名();
instanceof关键字:判断某个对象是否属于某种数据类型
格式:boolean b = 对象 instanceof 数据类型;
public class Demo02 {
public static void main(String[] args) {
//多态中调用成员变量的特点
//运行时走父类成员变量的值
//编译、运行都看左边
Fu f=new Zi();
System.out.println(f.a);
//多态中调用成员方法的特点
//编译看左边,运行看右边
f.show();
//instanceof :判断对象属于哪种数据类型
boolean flag=f instanceof Zi;
System.out.println(flag);
}
多态转型:
向上转型:
父类类型 变量名 = new 子类类型();
向下转型:
子类类型 变量名 = (子类类型) 父类类型的变量;
public static void main(String[] args) {
//多态:向上转型
Fu f=new Zi();
//Zi zi=new Zi();
if(f instanceof Zi){
//多态:向下转型
Zi zi=(Zi)f;
System.out.println(zi.a);
zi.show();
zi.eat();
}
}