面向对象的三大特征:封装、继承、多态
封装:隐藏了实现细节,对外提供可以访问的方式。
继承:在现有的基础上创建一个类,让一个类继承另一个类,被继承的类叫父类,继承的类叫子类。
多态:父类引用变量可以指向子类对象,配合继承与方法重写提高了代码的复用性与扩展性。
封装用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(); } }