封装、继承、多态 、接口

时间:2020-12-04 14:40:16   收藏:0   阅读:24

封装

改露的露,改藏的藏

封装就是数据的隐藏

通常应禁止直接访问一个对象数据的实际表示,而应通过操作接口来访问,这称为信息隐藏

属性私有,get/set

代码演示

//学生类
public class Student {
    //成员变量
    //姓名
    private String name;
    //年龄
    private int age;

    //set get
    //alt + insert
    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    //成员方法
    public void study(){
        System.out.println("键盘敲烂 月薪过万");
    }

    public void eat(){
        System.out.println("学生要吃有营养的饭");
    }
}

//测试类
public class Test {
    public static void main(String[] args) {
        //创建对象
        Student s = new Student();

        //给成员变量赋值
        s.setName("小明");
        s.setAge(25);

        //获取成员变量的值
        System.out.println(s.getName() + "  " + s.getAge());
    }
}

 

封装作用

继承

继承的本质就是对某一批类的抽象,从而实现对现实世界美好的建模

extends的意思是"拓展"。子类是父类的拓展

Java中类只有单继承,没有多继承

继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等

继承关系的两个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键字extends来表示

子类和父类之间,从意义上讲应该是具有"is a"的关系

在Java中所有的类都默认直接或者间接继承Object类

//人类(父类)
public class Person {
    //成员变量
    String name;
    int age;

    //成员方法
    public void eat(){
        System.out.println("好好吃饭 天天长大");
    }

    public void sleep(){
        System.out.println("好好睡觉");
    }
}

//学生类(子类)
public class Student extends Person{
    //自动继承父类的成员
}

public class Test {
    public static void main(String[] args) {
        //创建学生对象
        Student s = new Student();

        //使用成员变量
        s.name = "小明";
        s.age = 28;

        //使用成员方法
        s.eat();
        s.sleep();
    }
}

this和super关键字

成员变量和成员方法:---------------------
public class Person {
    //成员变量
    String name = "王健林";
    
    //成员方法
     public void eat(){
        System.out.println("父类的吃饭方法");
    }
}

public class Student extends Person {
    //成员变量
    String name = "王思聪";

    //方法
    public void show(){
        //局部变量
        String name = "王可可";

        System.out.println(name);       //"王可可"
        System.out.println(this.name);  //"王思聪"
        System.out.println(super.name); //"王健林"
        
        //调用方法
        eat();      //就近原则
        this.eat(); //和上面写法是一样的
        super.eat();//访问父类的成员方法
    }
}


构造方法:-------------------------------
//父类
public class Person {
    String name;
    int age;

    //构造方法
    public Person() {
        System.out.println("父类空");
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("父类有");
    }
}
//子类
public class Student extends Person {
    //构造方法
    //空参构造
    public Student() {
        //访问父类的空参构造
        //super();
        System.out.println("子类空");
    }

    //有参构造
    public Student(String name, int age) {
        //访问父类的有参构造
        super(name, age);
        System.out.println("子类有");
    }
}

多态

即同一个方法可以根据发送对象的不同而采用不同的行为方式

一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多

多态的前提

注意:多态是方法的多态,属性没有多态性

多态的成员访问规则

public class Person {

    String name = "王健林";

    public void eat(){
        System.out.println("王健林吃米其林");
    }
}

public class Student extends Person {

    String name = "王思聪";

    public void eat(){
        System.out.println("王思聪吃热狗");
    }
}

public class Test {
    public static void main(String[] args) {
        //一个学生是一个人
        Person p = new Student();

        //访问变量
        //编译看左边(父类),运行看左边(父类)
        System.out.println(p.name);

        //访问方法
        //编译看左边(父类),运行看右边(子类)
        p.eat();

    }
}

多态的好处和弊端

public class Test {
    public static void main(String[] args) {
        //创建对象
        Sheep s = new Sheep();
        method(s);

        Dog d = new Dog();
        method(d);

        Cat c = new Cat();
        method(c);
    }

    //使用多态
    //提高了代码的扩展性
    public static void method(Animal a){      //相当于: Animal a = new Sheep();
        System.out.println("有请开始叫:");    //相当于: Animal a = new Dog();
        a.jiao();                            //相当于: Animal a = new Cat());
    }


    /*
    不使用多态
    //定义方法
    public static void method(Sheep s){
        System.out.println("有请开始叫:");
        s.jiao();
    }

    //定义方法
    public static void method(Dog d){
        System.out.println("有请开始叫:");
        d.jiao();
    }

    //定义方法
    public static void method(Cat c){
        System.out.println("有请开始叫:");
        c.jiao();
    }
    */
}

多态的转型

接口

接口的概念

 

public interface 接口名{
    
}

接口的实现

接口和类使用是非常相似的,类可以被继承的,而接口可以被实现。

 

public class 类名 implements 接口{
    
}

//接口被实现,实现类也能够拥有接口的成员

接口的成员

//抽象方法
public abstract void method();
//静态方法(直接用接口名调用)
public static void method2(){
    System.out.println("静态方法");
}
//默认方法(让子类直接使用)
public default void method3(){
    System.out.println("默认方法");
}
//私有方法(如果本类中有重复的代码,就可以写在私有方法中)
private void method4(){
    System.out.println("私有方法");
}
//定义变量
int a = 10;

接口的注意事项

  1. 我们习惯把实现和被实现的关系也叫做是子类和父类的关系
  2. 接口中的成员变量是常量,默认有三个修饰符 public static final
  3. 接口的普通方法都是抽象方法,默认有两个修饰符 public abstract
  4. 接口中不能有构造方法,接口也不能被创建对象
  5. 接口的实现类必须重写接口的所有抽象方法,或者实现类是一个抽象类

类和类的关系:

类可以继承类,java中只支持单继承。(一个类只能有一个父类,一个类只能有一个亲爹)

类和接口的关系:

类可以实现接口,java中支持多实现。(一个类可以实现多个接口,一个类可以有多个干爹)

接口和接口的关系:

接口和接口是继承关系,java中的接口是多继承。(平时写代码不会遇到)

结论:

在开发中遇到最常见/最复杂的写法:
一个类在继承一个父类的情况下再实现多个接口
QQQ这个类继承了CCC类还实现了AAA和BBB两个接口

public class QQQ extends CCC implements AAA,BBB{

}

 

原文:https://www.cnblogs.com/SunJunchen/p/14084950.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!