day10遇见狂神说学Java

封装

高内聚,低耦合,该漏的漏,该藏的藏

高内聚,低耦合的意思是如银行来举例,高内聚:只允许银行内部人员对钱进行操作,不允许外部人员干涉;低耦合:仅暴露少量的方法给外部人员使用,用户只能对自己的钱进行存取操作。

封装中,属性私有,get/set。将属性private后,那么外部不可以对这个属性直接进行读取、修改,只能通过set、get进行访问。public将控制权可以交给别人,但是private是将控制权留给自己。

1.提高程序的安全性,保护数据

2.隐藏代码的实现细节

3.统一接口

4.增加系统可维护性

public class Application {
    public static void main(String[] args) {
        Student student=new Student();
        student.setAge(-1);
        System.out.println(student.getAge());
        student.setName("秦将");
        System.out.println(student.getName());
    }
}
public class Student{
    //属性私有:封装的特性,私有属性后,通过开发人员的编写,在用户层面,用户只能进行适当的权限操作,从而保护了数据信息。
    private int age;
    private String name;
    //由于此时属性私有,那么别的类就不能随意调用这个方法,此时就需要公开的public中set/get方法进行属性调用
    //get方法是获取该属性的值,set方法是对该属性进行赋值
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        if(age>120|age<0) {
            this.age=3;
        }else {
            this.age=age;
        }
    }

    public String getName() {
        return name;
    }

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

继承

继承是类和类之间的关系,父类(基类),子类(派生类)

子类要继承父类,需要使用extends关键字表示,子类是父类的扩展。

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

Java中类只有单继承,没有多继承。比如一个儿子只有一个爸爸,但是一个爸爸可以有多个儿子

public class Person {
    private int age;
    String name;
    int money=10_0000_0000;
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    public void say(){
        System.out.println("说了一句话");
    }
}
public class Teacher extends Person {
    public static void main(String[] args) {
        Person teacher= new Person();
        teacher.setAge(15);
        System.out.println(teacher.getAge());
        teacher.say();
        System.out.println(teacher.money);
    }
}

super–代表父 this–代表当前

super只能在子类的构造方法或者方法中出现;

super在构造方法中,必须写在第一个;

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

和this的不同:

1.this只能在本类中调用,而super必须在继承条件下才能调用

2.this表示本类的;super表示父类的

package OOP.Demo09;

import OOP.Demo09.Student;

public class Application {
    public static void main(String[] args) {
        Student student=new Student();
        student.test("秦将");
    }
}
public class Student extends Person{
    private String name="狂神";

    public Student() {
        //不调用父类的无参,也会隐藏执行;先执行父类的无参,再执行子类;
        //如果父类是有参构造,那么在调用时,也只能调用有参构造
        super("hhhhh");
        System.out.println("student无参执行");
    }

    public void print(){
        System.out.println("hhhh");
    }
    public void test1()//有static不能用this
    {
    print();
    super.print();
    }
    public void test(String name)//有static不能用this
{
    System.out.println(name);
    System.out.println(this.name);
    System.out.println(super.name);
}
}
public class Person {
    public Person(String construct) {
        System.out.println("person 无参执行");
    }

    protected String name="秦将";
    public void print(){
        System.out.println("Person");
    }
}

方法的重写

public class Application {
    public static void main(String[] args) {
        A a=new A();
        a.test();
        B b=new A();//static:父类的引用指向子类;静态方法调用时,方法的调用只和左边定义的数据类型有关,比如左边是A,结果就为a//去掉static:子类重写了父类的方法
        
        b.test();

    }
}
public class A extends B {
    @Override
    public void test() {
        super.test();
    }
}
public class B {
    public void test(){
        System.out.println("B->test");
    }
}

总结:重写用于父类的东西子类,想要改变,重写需要在继承关系下使用;

static不能用作方法的重写,因为static是和类开始同时创建的

1.重写只用于方法,不用于属性;

2.重写方法名、参数,返回类型需保证一样;

3.修饰符范围可以扩大,但不能缩小;

4.重写抛出异常的范围可以缩小,但不能扩大;比如父类有100万欠款,不能到子类就有1000万

方法重载:相同的方法名,但是返回类型和参数均不一样

多态

public class Application {
    public static void main(String[] args) {
       Person s1 =new Student();//只能是子类和父类的关系时,才可以让父类的引用指向子类
       Student s2 =new Student();

       s1.run();
       s2.run();//子类重写了父类的方法,父类调用的也是子类
       s2.eat();//父类不能调用子类独有的方法
        //总结:对象能执行哪些方法,主要看对象左边的类型,和右边关系不大
    }
}
public class Person {
    public void run(){
        System.out.println("run");
    }
}
public class Student extends Person{
    public void run(){
        System.out.println("walk");
    }
    public void eat(){
        System.out.println("eat");
    }
}

总结:

1.多态一定要有继承关系

2.父类的引用指向子类

3.子类重写父类的方法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值