封装、继承、多态【上】

简介: 封装 程序设计要高内聚,低耦合 封装(数据的隐藏) 通常应禁止直接访问一个对象中数据的实际表示,而应该通过操作接口来访问,这称为信息隐藏 属性私有,get/set public static void main(String[] args) { Student s1 = new Student();

封装、继承、多态


封装


程序设计要高内聚,低耦合


封装(数据的隐藏)


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


属性私有,get/set


public static void main(String[] args) {
        Student s1 = new Student();
        s1.setName("秦疆");
        System.out.println(s1.getName());
        s1.setAge(17);//不合法的
        System.out.println(s1.getAge());
    }


//类     private:私有
public class Student {
    private String name;//名字
    private int id;//学号
    private char sex;//性别
    private int age;//年龄
    //提供一些可以操作这个属性的方法!
    //提供一些public的get、set方法
    //get   获得这个数据
    public String getName(){
        return this.name;
    }
    //set   给这个数据设置值
    public void setName(String name){
        this.name=name;
    }
    //alt+insert    自动生成get\set
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public char getSex() {
        return sex;
    }
    public void setSex(char sex) {
        this.sex = sex;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        if (age>120 || age<0){
            this.age = 3;
        }else{
            this.age=age;
        }
    }
}


继承


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


  • extends的意思是"扩展"。。子类是父类的扩展


  • JAVA中类只有单继承,没有多继承


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


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


//学生    is  人
//子类继承了父类,就会拥有父类的全部方法
public class Student extends Person{
    //ctrl+h;F4   打开当前类的继承关系图
}
=============================================
//老师    is  人   派生类,子类
public class Teacher extends Person{
}
=============================================
//学生    is  人
//在Java中所有的类,都默认直接或者间接继承object
public class Person {
    //public
    //protected
    //default
    //private
    private int money = 10_0000_0000;
    public void say(){
        System.out.println("说了一句话");
    }
    public int getMoney() {
        return money;
    }
    public void setMoney(int money) {
        this.money = money;
    }
}
=============================================
public class Application {
    public static void main(String[] args) {
        Student student = new Student();
        student.say();
        System.out.println(student.getMoney());
        student.setMoney(120392879);
        System.out.println(student.getMoney());
        Person person = new Person();
    }
}


Java中的super


//学生    is  人
//在Java中所有的类,都默认直接或者间接继承object
public class Person {
//一个类重写了有参构造器,必须先写一个无参构造器,否则将报错
    public Person() {
        System.out.println("Person无参执行了");
    }
    protected String name = "kuangshen";
    //private私有的东西无法被继承
    public void print(){
        System.out.println("Person");
    }
}
==========================================================
//学生    is  人
//子类继承了父类,就会拥有父类的全部方法
public class Student extends Person{
    public Student(){
        //隐藏代码,调用了父类的无参构造
        //如果父类只有有参构造器,那么必须调用有参构造器,不能调用无参构造器
        super();    //调用父类的构造器,必须要在子类构造器的第一行
        System.out.println("Student无参执行了");
    }
    private String name = "qinjiang";
    public void print(){
        System.out.println("Student");
    }
    public void test1(){
        print();
        this.print();
        super.print();
    }
    public void test(String name){
        System.out.println(name);//秦疆
        System.out.println(this.name);//qinjiang
        System.out.println(super.name);//kuangshen
    }
}
===========================================================
import com.oop.demo05.Person;
import com.oop.demo05.Student;
public class Application {
    public static void main(String[] args) {
        Student student = new Student();
        //student.test("秦疆");
        student.test1();
    }
}


  • super注意点:


1. super调用父类的构造方法,必须在构造方法的第一个


2. super必须只能出现在子类的方法或者构造方法中


3. super和this不能同时调用构造方法


  • super与this的区别:


代表的对象不同:


this:本身调用者这个对象


super:代表父类对象的应用


前提


this:没有继承也可以使用


super:只能在继承条件才可以使用


构造方法


this();本类的构造


super();父类的构造


方法重写


  • 重写:需要有继承关系,子类重写父类的方法!


1.方法名必须相同


2.参数列表必须相同


3.修饰符:范围可以扩大,但是不能缩小 private -> default -> protected -> public


4.抛出的异常:范围,可以被缩小,但不能扩大 ClassNotFoundException -> Exception(大)


重写,子类的方法和父类必须要一致,方法体(方法中的内容)不同


为什么要重写:


1.父类的功能,子类不一定需要,或者不一定满足


alt + insert : override


public class A extends B{
    /*public static void test(){
        System.out.println("A=>test()");
    }*/
    //override  重写
    @Override   //注解:有功能的注释
    public void test() {
        System.out.println("A=>test()");
    }
}
===============================================
//重写都是方法的重写,和属性无关
public class B {
    /*public static void test(){      //静态方法
        System.out.println("B=>test()");
    }*/
    public void test(){           //非静态方法
        System.out.println("B=>test");
    }
}
================================================
import com.oop.demo05.B;
import com.oop.demo05.Person;
import com.oop.demo05.Student;
public class Application {
    //静态的方法和非静态的方法区别很大(static)
    //静态方法(有static):方法的调用之和左边,定义的类型有关
    //非静态:重写
    public static void main(String[] args) {
        //方法的调用只和左边,定义的数据类型有关
        A a = new A();
        a.test();//A
        //父类的引用指向了子类
        B b = new A();//子类重写了父类的方法
        b.test();//B
    }
}
相关文章
|
17天前
抽象类和接口在实现多态时的区别
【10月更文挑战第19天】抽象类和接口在实现多态时都有其独特的作用。抽象类更适合用于定义一些具有共同特征和部分实现的类,而接口则更强调定义一组行为规范,以便不同的类可以实现并组合这些行为。
50 10
|
2月前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
6月前
|
C++
C++中的封装、继承与多态:深入理解与应用
C++中的封装、继承与多态:深入理解与应用
144 1
|
4月前
|
Java 编译器
Java面向对象(三)详解: 封装 | 继承 | 方法重写 | 抽象类
Java面向对象(三)详解: 封装 | 继承 | 方法重写 | 抽象类
|
Java
1.8 封装、继承、多态
1.8 封装、继承、多态
41 1
|
Java
面向对象编程基础:类、对象、封装、继承和多态
面向对象编程基础:类、对象、封装、继承和多态
108 0
|
设计模式
从“封装、继承、多态”看构建知识网
从“封装、继承、多态”看构建知识网
59 0
面向对象的封装,继承,多态(一)
面向对象的封装,继承,多态。
80 0
面向对象的封装,继承,多态(一)