Java的基本特性

面向对象

面向对象和面向过程的区别

面向过程主要是把问题分解成不同的步骤,然后把各个步骤转换成方法,最后根据步骤调用相应的方法,它更加强调过程

面向对象会把问题分解成各个对象,然后各个对象之间进行交互,每个对象内部进行了封装

通过不同对象之间方法的调用来完成一个项目或者是解决一个问题(但是这样直接在调用方里面创建对象会造成代码耦合度过高)

面向过程注重过程,面向对象注重对象之间的交互。面向对象将复杂的事情简单化,我们从行动者变成了指挥者。面向对象开发就是去创建对象,指挥对象做事情。

跨平台

Java的跨平台是基于JVM(Java虚拟机)的。不同的操作系统有不同版本的JVM负责加载运行Java程序。
在这里插入图片描述

封装

  1. 什么是封装?

    封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

  2. 封装的优点?

    隐藏代码的实现细节,提高安全性。

就像电视机提供了对外的一些按钮,但是里面的电路设计,逻辑设计是看不到的。Java的封装性主要体现在访问控制符上,分别是private、默认的、protected、public。

修饰词本类同一个包的类子类任何地方
private×××
default(默认)××
protected×
public
  • public:公共访问修饰符,该变量是公共的,可以被任何类的方法访问

  • private: 私有访问修饰符,该变量只允许本类的方法访问,其他任何类(包括子类)中的方法均不能访问

  • protected: 保护访问修饰符,该变量可以被本类、子类及同一个包中的类访问,在子类中可以覆盖该变量

  • 默认:默认访问修饰符,该变量在同一个包中的类可以访问,其他包中的类不能访问

场景:

public class Person {
    String name;//姓名
    int age;//年龄
}

上面定义了一个Person类,下面写一个PersonTest类对其进行测试

public class PersonTest{

    public static void main(String[] args){

        //1.创建Person类型的对象
        Person p = new Person();
        System.out.println(p.age); //0

        p.age = -10;//这个地方的数据不合理

    }
}

上面的PersonTest类中人的年龄出现了-10,这显然是一个不合法的数据,所以应该将Person类中的age隐藏起来,不能让外界直接访问,需要使用private修饰符将age进行封装。

public class Person {
    private String name;
    private int age;

    /*
        添加private修饰之后,外界无法直接访问age了。
        这时需要提供两个方法供外界访问即set方法和get方法。
    */

    //对外提供两个公开的方法。
    //set方法  用于给年龄赋值
    public void setAge(int age){
        //安全控制
        if(age<0 || age>120){
            System.out.println("年龄不合法");//这里可以自定义异常
            return;
        }

        this.age = age;
    }

    //get方法  用于读取年龄
    public int getAge(){                         
        return age;
    }

    public void setName(String name){
        this.name = name;
    }

    public String getName(){
        return name;
    }
}

创建测试类

public class PersonTest{

    public static void main(String[] args){

        //1.创建Person类型的对象
        Person p = new Person();
        p.setName("郝仁");
        p.setAge(20);
        System.out.println(p.getName());
        System.out.println(p.getAge());

    }
}

继承

  1. 什么是继承?

    继承是面向对象三大特征之一。java中的继承描述的是两个类之间的关系,被继承的类成为父类或者基类,继承的类称为子类或派生类。使用extends关键字来表示。在java语言里面只支持单继承,即一个子类只能有一个父类,子类可以继承父类中的非private修饰的成员方法和成员变量,构造方法不能继承。如果一个类没有显示的继承其他类,那么这个类会默认继承Object类,Object是SUN公司提供的java中的根类

  2. 继承的优缺点?

    优点:提高了代码的复用性、提高了代码的维护性、让类与类之间产生了关系,是多态的前提

    缺点:增强了类之间的耦合。软件开发的一个原则是高内聚,低耦合。内聚是一个模块内各个元素彼此结合的紧密程度。耦合是一个软件里面不同磨具爱之间相互连接的数量。

Java只允许单继承,但是可以实现多个类。单根继承结构保证所有对象都具备某些功能,如Java的所有类都有一个共同的父类—Object类,即所有的类都可以调用Object类中的方法,如wait()方法及其重载方法,notify和notifyAll()方法等用于线程间通信的方法,clone()方法,toString()方法,equals(Object o)方法和hashCode()方法等,这些方法在Java的开发过程中都有很大的作用。

此外,用final关键字修饰的类不能被继承,如String类

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence 

子类是可以继承父类中所有的属性和方法的,但是会受到访问权限的限制,子类是无法访问父类中用private修饰的变量和方法的。

多态

多态就是事物存在的多种形态,比如你在大街上看见一只藏獒,你可以说这只藏獒真凶猛,也可以说这只狗真凶猛,还可以说这个动物真凶猛,以上三种说法其实都是指的这只藏獒。

Java中的多态分为静多态和动多态,静多态就是方法的重载。动多态,也叫做运行时多态,是基于RTTI(运行时类型识别)的。大致的过程为基类的引用引用派生类的对象,然后使用这个基类的引用调用派生类重写后的方法。因为class对象是派生类的class对象,所以在查方法表的时候,是调用的派生类重写之后的方法而非从基类继承来的方法。

动多态的三要素:继承、向上造型、方法重写。

多态可以提高代码的复用性,同样的一个方法名,内部的实现是不同的,如People类和其派生类Student类与Teacher类,如果写一个打印People一天生活日志的方法,入参为People的引用,这时无论是Student类还是Teacher类,均可作为入参进入此方法,然后调用People的方法eat()方法,sleep()方法等,至于具体的实现要看Student类和Teacher类是否重写了。

基类的引用引用派生类的对象,可以调用基类的方法,通过强转引用的类型也可以调用派生类特有的方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值