JAVA的面向对象,封装,继承,多态

面向对象

什么是面向对象?
对 Java 语言来说,一切皆是对象。把现实世界中的对象抽象地体现在编程世界中,一个对象代表了某个具体的操作。一个个对象最终组成了完整的程序设计,这些对象可以是独立存在的,也可以是从别的对象继承过来的。对象之间通过相互作用传递信息,实现程序开发。

对象,就是对问题中的事物的抽象。

面向对象就是把现实中的事物都抽象为“对象”。每个对象是唯一的,且都可以拥有它的属性与行为。我们就可以通过调用这些对象的方法、属性去解决问题。

对象是由数据(描述事物的属性)和作用于数据的操作(体现事物的行为)组成的封装体,描述客观事物的一个实体,是构成系统的基本单元。


类是对一组有相同数据和相同操作的对象的定义,是对象的模板,其包含的方法和数据描述一组对象的共同行为和属性。类是在对象之上的抽象,对象则是类的具体化,是类的实例。类可有其子类,也可有其他类,形成类层次结构。

类和对象的区别

类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。

类是一组具有相同属性和行为的对象的抽象。

封装


JAVA封装的意义:
一是把属性和方法(特征与功能)封装在一个类组件当中。
二是使用private(属性私有化)关键字来限制属性和方法的使用,public(属性共有化)

public:对外公开,访问级别最高

protected:只对同一个包中的类或者子类公开

默认:只对同一个包中的类公开

private:不对外公开,只能在对象内部访问,访问级别最低

创建一个学生类进行封装

public class fnegzhuang {
    public class student {
        private String name;//姓名
        private int age;//年龄
        private String sex;//性别
        private int id;//学号

        //Getter方法获取类中的属性
        public String getName() {
            return name;
        }

        public int getAge() {
            return age;
        }

        public String getSex() {
            return sex;
        }
//       学号只能为八位
        public void getId(int id) {
            String Id=id+"";//转换为字符串
            if(Id.length()==8) {//判读Id的长度是否等于八
                this.id=id;
            }

        }

        //Setter方法设置类中的属性
        public void setName(String name) {
            this.name = name;
        }

        public void setAge(int age) {
            this.age = age;
        }

        public void setSex(String sex) {
            this.sex = sex;
        }

        public void setNumber(int id) {
            this.id = id;
        }

        //toString方法打印出类的属性
        @Override
        public String toString() {
            return "student{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    ", sex='" + sex + '\'' +
                    ", id=" + id +
                    '}';
        }
    }
}


继承


继承是面向对象三大特征之一,可以使得子类具有父类的属性和方法,同时还可以在子类中重新定义以及追加属性和方法。


让某个类型的对象获得另一个类型的对象的属性和方法。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

好处

1、提高代码的复用性

2、类与类之间产生了关系,是多态的前提

package com.company;

public class Main {

    public static void main(String[] args) {

             Cat c=new Cat();
             Animal animal=new Animal();
             System.out.println(c.age);
             System.out.println(c.name);
             c.eat();//打印Cat类的方法
            //animal.jump();//会报错,因为父类不可以调用子类的私有方法
            //注:子类不可调用父类的私有方法,不是因为没有继承,而是子类对父类的私有资源不可见
            //System.out.println(c.Id);
        }

    }

        class Animal {
            String name;
            Integer age;
            private Integer ID;

            public Animal() {//子类会默认使用父类的无参构造
                System.out.println("我是父类");
            }

            public void eat() {//定义父类的方法
                System.out.println("12");

            }
        }

        class Cat extends Animal{//创建Animal的子类Cat

      /*注意:子类会默认使用父类的无参构造*/
         public void eat(){//子类可以重写父类的方法
             System.out.println("123");
        }
        private void jump(){//定义子类的私有方法
         System.out.println("坤");
        }
    }       

多态

多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作

要实现多态,以下三大条件缺一不可:

  1. 必须在继承体系下
  2. 子类必须要对父类中方法进行重写
  3. 通过父类的引用调用重写的方法

接口 


什么是接口
1.接口是一种特殊的内部类,它里面的所有方法都没有实现。

接口的特点:
1.接口中成员默认访问修饰符都是public,即便你不写。
2.定义接口必须interface关键字完成
3.接口中可以定义变量,但是变量必须有固定的修饰符修饰,public static final 所以接口中的变量也称之为常量。
4. 接口中可以定义方法,方法也有固定的修饰符,public abstract
5. 接口中的成员都是公共的。
6. 接口不可以创建对象。
7. 子类必须覆盖掉接口中所有的抽象方法后,子类才可以实例化。否则子类是一个抽象类
8.接口最重要的体现:解决java单继承的弊端:类继承(继承基础功能)类同时实现接口(扩展功能);
接口多继承,多个接口之间可以使用extends进行继承;
 

3.接口语法的实现
先声明USB接口:其中规定了要实现USB接口就必须实现接口规定实现的read( )和write( )这两个方法

package test01;

public interface USB {
    void read();
    void write();
}


 然后在写两个类,这两个类去实现USB接口。(实现其中的方法)

package test01;

public class Kingston implements USB{

    @Override
    public void read() {
        System.out.println("金士顿正在通过USB功能读取数据");
    }

    @Override
    public void write() {
        System.out.println("金士顿正在通过USB功能写入数据");
    }
}
package test01;

public class shanDiks implements USB{

    @Override
    public void read() {
        System.out.println("闪迪正在通过USB功能读取数据");
    }

    @Override
    public void write() {
        System.out.println("闪迪正在通过USB功能写入数据");
    }
}

运行一下

package test01;

public class test01 {
    public static void main(String[] args) {
        Kingston k=new Kingston();
        k.read();
        k.write();
        ShanDiks s=new ShanDiks();
        s.read();
        s.write();
    }
}

JAVA的面向对象,封装,继承,多态_第1张图片

你可能感兴趣的:(java)