JAVA的三大特征

本文详细讲解了Java编程中的三大特性:封装、继承和多态。封装涉及到权限控制,通过set和get方法实现数据访问。继承模拟生物的DNA,Java单继承但可通过接口弥补。多态则涉及向上和向下转型,允许对象以不同的形态存在。此外,还讨论了equals()与==的区别以及static关键字的应用。
摘要由CSDN通过智能技术生成

1.封装

封装 ,举例:生活中整理书

  • 在代码中就是权限问题

public int getMoney(){
        //可以做一些逻辑判断
        money = money - 1000;
        return money;
    }
    
int[]ars = new int[6];
    public void setMoney(){
        this.money = money;
        //从手机端或者app客户端传过来的值(年龄),为了国家监察,存到数据库中的值,不能低于18岁
        //有些够18了,但是写一个14,就不能写道数据库中
        if(money >= 18){
            ars[0] = money;
        }else {
            System.out.println("获取的年龄不对,重新获取");
        }
    }

2.继承

儿子跟父亲,DNA

java 只要敢写这个关键字 extend 说明就是子类跟父类的关系

左边一个类 extend 右边一个类

  • 继承的特点:java中是跟人一样,单继承的路子,py,c++是多继承

  • java出来一个接口来替代跟弥补缺失

  • 继承核心就是,我继承了父类的属性跟方法,

  • 第二我们如果觉得父类方法不合适,我可以覆写父类的方法

  • this,它是针对当前对象,super它可以调用父类构造方法,跟方法,构造方法你就根据你想要用

  • 几个参数数你就super(参数,参数,...),如果是调用父类的方法那么你就把super当前父类对象,

  • 直接点super.方法

    	//@Override,就代表使用父类的
        @Override
        public void getAll(){
            //就是子类中调用父类的方法
            super.getAll();
            //多加一些功能了就
            System.out.println("这是一条狗");
        }
        //new 子类的时候,先执行父类的构造器,再执行子类的构造器

    3.多态

    向上转型

    将一个对象,由子类的类型转型成为父类的类型

    这个肯定没有问题,自动帮你转了,因为编译器知道,子类本来就拥有父类的所有属性跟方法

    如果子类转型为父类,那么子类就不能调用自己原来的特有的属性跟方法了,因为她已经变为父类了

    向下转型

    将一个对象,由父类的类型转型成为子类的类型

    存在失败的可能性,是一个显示转换,需要强制类型转换

    向下转型后,将可以访问子类中独有的成员

    向下转型如果失败,会提示ClassCastException

    但如果确实想要向下转型,又不让他报错

    instanceof 那就拿这个关键字来做判断类型检查,如果是同一个类型,那么就允许转

    这样就不会报错了

    一般都是声明父类new子类

    public class MainClass {
        public static void main(String[] args) {
            //黑人转型为人,子类变父类
            BlackPerson blackperson = new BlackPerson();
            Person person = blackperson;
            //向下转型
            if(person instanceof WhitePerson){
                WhitePerson whitePerson = (WhitePerson) person;
                whitePerson.color = "白色";
            }
    
    
        }
    }
    
    /**
     * 人
     */
    class Person{
        String name;
        Person(){
    
        }
    }
    
    /**
     * 黑人
     */
    class BlackPerson extends Person{
    
        String age;
        BlackPerson(){
    
        }
    }
    
    /**
     * 白人
     */
    class WhitePerson extends Person{
        //颜色
        String color;
        WhitePerson(){
    
        }
    }

    补充

    1.equals()与==这个区别

    equals()与==这个区别?
     1.第一、==是操作符,equals()是个方法
     2.==比较地址,如果是基本类型可以比较值相等,equals()对象值
     3.运行速度,你想也知道==比较的是地址肯定快。
     4.你确定equals()能比较对象值,你要这么覆写了父类也就咱们最上上类Object,它里面有一个equals(),其实跟咱们
    * ==就没有区别,但为啥所有都说equals才能判读值呢,那是因为大多数都覆写了equals(),他们自己帮做了比较,所以equals()方法才能比较对象的值。
    
        
        this 指的是当前对象
        this 可以在构造方法当中用,可以在非静态方法中用,可以在构造代码块中用

    2.Static 关键字

    static 有静态属性,静态方法
           静态的方法不能使用非静态的属性
           因为静态的方法属于类
           而非静态的属性是属于对象的
           拿的类的调用对象,会出现问题,因为对象可能还没有,所以编译器不让调用
    
           但是非静态的方法可以使用静态属性
        
    	   传参数,一种可以通过构造方法,一种可以通过普通方法
    People p1 = new People("xiaoming",13);
            //todo 下面就是静态方法的属性赋值与调用
            PeopleStaticClass.name = "小红";
            PeopleStaticClass.age = 18;
            PeopleStaticClass.getAll();
    public class PeopleStaticClass {
        //静态的属性 第一个关键字是修饰,其实就是权限,公开的意思
        //第二是静态属性
        //第三是类型
        public static String name;
        public static int age;
    
        public String color;
        //静态方法就是在前面加个关键字
        public static void getAll(){
            System.out.println("名字"+name);
            System.out.println("年龄"+age);
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值