程序员

Java基础(一) | @小白 封装 继承 多态

2017-06-20  本文已影响0人  采风JS

课堂的时间所剩无几,最后的复习阶段,实现Java的进阶与提高,基础知识永远是王道,学而时习之,不亦乐乎。今天带来的三大概念,封装、继承和多态,简述自己的浅薄认识,不足之处,请见谅。

一、封装

public class Person {
    protected String name;
    protected int age;
    //1:female 0:male
    private int sex;
    
    public Person(String name,int age,int sex){
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    /**
     * @method getAge
     * @desc 实现age从int类型转换为String类型
     * @return String
     */
    public String getAge() {
        return String.valueOf(age);
    }
    /**
     * @method setAge
     * @desc 对年龄范围进行控制
     * @return void
     */
    public void setAge(int age) {
        if (age < 0 || age > 110) {
            System.out.println("The age input is wrong!");
        } else {
            this.age = age;
        }
    }
    /**
     * @method getSexName
     * @desc 实现性别的显示输出
     * @return String
     */
    public String getSexName() {
        if(this.sex != 0 || this.sex != 1){
            return null;
        }
        return this.sex == 1 ? "male" : "female";
    }
    
    public void setSex(int sex) {
        this.sex = sex;
    }   
}

二、继承

public class Teacher extends Person {
    //继承name和age属性,sex不继承,Teacher的属性学院
    protected String school;

    //若父类无构造方法,自动添加默认无参构造方法;
    //若父类仅有有参构造方法,子类必须显示调用父类有参构造方法
    //还有自己编写的无参构造方法 
    public Teacher(String name,int age,int sex,String school){
        //显示调用父类的构造方法
        super(name,age,sex);
        this.school = school;
    }

    //重写父类的setAge方法,实现功能扩展
    @Override
    public void setAge(int age) {
        if (this.age < 0 || this.age > 110 ) {
            System.out.println("Age is not normal");
            return ;
        } else if(this.age < 30) {
            System.out.println("The teacher is so talent");
        }
        this.age = age;
    } 
    public static void main(String[] args) {
        Person p = new Teacher("xh",23,0,"TC");
    }
}

三、多态

    public class A {  
        public String show(D obj) {  
            return ("A and D");  
        }  
        public String show(A obj) {  
            return ("A and A");  
        }   
    }     
    public class B extends A{  
        public String show(B obj){  
            return ("B and B");  
        }      
        public String show(A obj){  
            return ("B and A");  
        }   
    }  
    public class C extends B{  
    }  
    public class D extends B{  
    }  
      
    public class Test {  
        public static void main(String[] args) {  
            A a1 = new A();  
            A a2 = new B();  
            B b = new B();  
            C c = new C();  
            D d = new D();  
              
            System.out.println("1--" + a1.show(b));  // 1--A and A
            System.out.println("2--" + a1.show(c));  // 2--A and A
            System.out.println("3--" + a1.show(d));  // 3--A and D
            System.out.println("4--" + a2.show(b));  // 4--B and A
            System.out.println("5--" + a2.show(c));  // 5--B and A
            System.out.println("6--" + a2.show(d));  // 6--A and D
            System.out.println("7--" + b.show(b));  // 7--B and B
            System.out.println("8--" + b.show(c));  // 8-- B and B
            System.out.println("9--" + b.show(d));  // 9-- A and D
        }  
    }  
// 此处的分析,应该结合继承链中方法调用和多态结合来看;
// 继承链方法调用 this.show(o) super.show(o) this.show((super)o) super.show((super)o) 此处的this以引用类型为主
// 上一步确定好方法后,考虑多态的使用原则,使用实际类型的方法

三大概念的认识,到这里先告一段落。
学如逆水行舟,不进则退。珍惜为数不多的校园生活吧!

上一篇 下一篇

猜你喜欢

热点阅读