面向对象--三大特性

面向对象--三大特性

以类的方式组织代码,以对象的组织(封装)数据。

三大特性

  • 封装:属性私有,set、get

    package oop;
    ​
    public class Student {
        //属性私有(private)
        private String name;//姓名
        private int id;//学号
        private char sex;//性别
    ​
        public String getName() {
            return name;
        }
    ​
        public void setName(String name) {
            this.name = name;
        }
    ​
        public int getId() {
            return id;
        }
    ​
        public void setId(int id) {
            this.id = id;
        }
    ​
        public char getSex() {
            return sex;
        }
    ​
        public void setSex(char sex) {
            this.sex = sex;
        }
    }
    ​
    package oop;
    ​
    public class StudentApplication {
        public static void main(String[] args) {
            Student s1=new Student();
            s1.setName("张三");
            s1.setId(123);
            s1.setSex('男');
            System.out.println(s1.getName());
            System.out.println(s1.getId());
            System.out.println(s1.getSex());
        }
    }
    ​

    运行结果:

    张三 123 男

  • 继承:子类继承父类就会有父类的全部方法(ctrl+h【查看继承】)

    package oop.demo01;
    //Person人
    public class Person {
        protected String name="zhangsan";
        private int money=10_0000_0000;
        public void say(){
            System.out.println("说了一句话!");
        }
    ​
        public void print(){
            System.out.println("Person");
        }
    ​
        public Person() {
            System.out.println("Person无参构造执行了!");
        }
    ​
        public int getMoney() {
            return money;
        }
    ​
        public void setMoney(int money) {
            this.money = money;
        }
    }
    package oop.demo01;
    //Student学生 is 人
    public class Student extends Person{
        private String name="xiaohong";
        public void test(String name){
            System.out.println(name);
            System.out.println(this.name);
            System.out.println(super.name);
    ​
        }
    ​
        public Student() {
            //调用父类的构造器,必须要在子类构造器的第一行
            //只能出现在子类的方法或者构造方法中
            //super和this不能同时调用构造方法
            super();
            System.out.println("Student无参构造执行了!");
        }
    ​
        public void print(){
            System.out.println("Student");
        }
        public void test1(){
            print();
            this.print();
            super.print();
        }
    }
    package oop.demo01;
    ​
    public class Application {
        public static void main(String[] args) {
            Student s=new Student();
            s.say();
            System.out.println(s.getMoney());
            s.test("赵四");
            s.test1();
        }
    }
    运行结果:
    Person无参构造执行了!
    Student无参构造执行了!
    说了一句话!
    1000000000
    赵四
    xiaohong
    zhangsan
    Student
    Student
    Person
  • 多态

package oop.demo03;
​
public class Person {
    public void run(){
        System.out.println("run");
    }
}
​
package oop.demo03;
​
public class Student extends Person{
    public void run(){
        System.out.println("son");
    }
    public void eat(){
        System.out.println("吃饭!!!");
    }
}
​
package oop.demo03;
​
public class Application {
    public static void main(String[] args) {
​
        //一個對象的實際類型是確定的
        //new Person();
        //new Student();
        //可以指向的引用类型就不确定了:s2--父类的引用指向子类
        //Student:能调用的方法都是自己的或则是继承父类的方法
        Student s1=new Student();
        //Person:父类类型,可以指向子类,但是不能调用子类独有的发方法
        Person s2=new Student();
        Object s3=new Student();
​
        //对象能执行哪些方法,只要看对象左边的类型,和右边关系不大
        s2.run();//子类重写了父类的方法,执行子类的方法
        s1.run();
​
        s1.eat();
        //s2.eat();--报错
    }
    /**
     * 多态注意事项:
     * 1.多态是方法的多态,属是没有多态
     * 2.父类和子类要有联系,不然或报错:ClassCastException--类型转换异常
     * 3.存在关系:继承关系,方法需要重写,父类的引用指向子类对象--father f1 = new son();
     * 4.static方法,术语类,不属于实例,不能重写--final常量不能重写----private方法也不能重写
     */
}

运行结果:

son son 吃饭!!!

Instanceof

(类型转换)引用类型,判断一个对象是什么类型

package oop.demo03;
​
public class Person {
    public void run(){
        System.out.println("run");
    }
}
package oop.demo03;
​
public class Student extends Person{
    public void go(){
        System.out.println("go!!!");
    }
}
package oop.demo03;
​
public class Application {
    public static void main(String[] args) {
        //类型之间的转换:父 子
        //高            低
        Person p=new Student();
        //将Person类型转换为Student类型,就可以使用Student的方法论了
        ((Student)p).go();
        //子类转换为父类,可能会丢失自己本来的一些方法
        Student s=new Student();
        s.go();
        Person p2=s;
        //p2.go();//报错
    }
    /**
     * 1.父类的引用指向子类的对象
     * 2.把子类转换为父类,向上转换不用强制转换
     * 3.把父类转换为子类,向下转换:用强制转换
     * 4.方便方法的调用,减少重复的代码
     */
}
​
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值