Bootstrap

java基础-面向对象

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

Java一门面向对象编程语言。面向对象的特点:抽象、封装、继承、多态。

一、抽象

编程的目的就是将现实的事物抽象为计算机可以理解的代码。

二、封装

目的是将事物的信息放到一个类中表达,可以控制类和类中属性的访问权限。

优点:

  1. 减少耦合:可以独立开发、测试、优化、使用、理解和修改。
  2. 减轻维护负担
  3. 有效地调节性能
  4. 提高软件的可复用性
  5. 降低构建大型系统的风险:即使整个系统不可用,但是这些独立的模块却有可能是可用的。

三、继承

实现IS-A关系,如小明和人就是一种IS-A关系。可以实现对类的复用,通过继承一个现有的类。可以是使用已经定义的类中的方法和变量。注意:类的方法可以被继承,但是类的构造器不能被继承。

类的继承访问控制:

代码示例如下:

父类:Person.java

package org.example.面向对象;

public class Person {
    String name;//虽然是default但是子类在同一个包下是可以访问的
    public Integer age;
    private Integer money;
    public void dance(){
        System.out.println("跳舞");
    }
    public void sing(){
        System.out.println("唱歌");
    }
    private void getMoney(){
        System.out.println("去现金");
    }

}
子类:Girl.java
package org.example.面向对象;

public class Girl extends Person{//女孩也是person所以拥有person的属性
    //也会有name和age属性
    public static void main(String[] argss){
        Girl girl=new Girl();
        girl.name="我是小红";

        girl.dance();

    }
}

四、多态

1、一个类型为S的变量既可以指向类型为S的对象,又可以指向S的任何子类的对象。方法重写和向上类型转换都是泛型的体现。

  • List list=new ArrayList()//实现为不同的子类
  • List list=new LinkedList();

2、以多态的形式来传递参数,增强了参数类型的灵活性

  • 如:public void getName(Collection col);
  • 其中Collection就是接口,调用的时候可以传递任何子类型,从而实现多态。

3、一个对象只能有一种确切的数据类型(new 的时候只能有一种类型)

4、一个引用类型如果声明为父类的类型,到实际引用的是子类对象,那么改变量不能访问子类中添加的属性和方法。

  • List list=new ArryList();

代码如下:

Person.java

package org.example.面向对象;

public class Person {

    /*多态*/
    private String name="p";
    public void getName(){
        System.out.println("name="+name);
    }

}

Test.java

package org.example.面向对象;

public class Test {
    /*多态*/
    public void printPerson(Person p){
        p.getName();
    }

    public static void main(String[] args){
        Person p=new Person();//父类可以实例化任何一个子类
        p=new Girl();
        p.getName();//这里声明为Person,不能调用Girl的函数

        Test t=new Test();//可以传递不同的子类
        t.printPerson(new Girl());
    }
}

Girl.java

package org.example.面向对象;

public class Girl extends Person{//女孩也是person所以拥有person的属性
   
    /*多态*/
    @Override
    public void getName(){
        System.out.println("girl name");
    }

    public void sing(){
        System.out.println("girl sing");
    }
}

以上是代码练习

;