JAVA 封装继承七

一、封装

1.1、什么是封装

	封装,即隐藏**对象**的**属性和实现细节**,仅对外公开**接口**(方法/函数),控制在程序中**属性的读和修改**的**访问级别**;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的[源代码](https://baike.baidu.com/item/源代码/3814213)进行有机的结合,形成“类”,其中属性数据和函数都是类的成员。
			封装的目的:是增强安全性和简化编程,**使用者**不必了解具体的实现细节,而只是要通过外部[接口](https://baike.baidu.com/item/接口),以特定的访问权限来使用类的成员。

**广义来说:**一切公共代码的抽取都可以叫封装。

​ 一般体现在公共方法的封装。工具类。

狭义来说:隐藏对象的属性和实现细节。

  1. 将属性私有化 ,使用private关键字修饰。

  2. 为使用private关键字修饰的属性添加 get和set方法。通过get和set方法来操作属性。

    setAge()设置/getAge()获取

public class KongTiao {
    
    
    //private 私有,如果一个属性定义成私有的,那么外部就不能使用了  只能类使用
    //成员变量  私有化了
    private int wendu;
    //get 方法取值
    public int getWendu() {
    
    
        return wendu;
    }
    //set 方法赋值
    public void setWendu(int wendu) {
    
    
        if(wendu>31)wendu=31;
        if (wendu<60)wendu=60;

        this.wendu = wendu;
    }
}
public static void main(String[] args) {
    
    
        //封装  继承
        KongTiao kongTiao=new KongTiao();//调用一个私有的方法
        kongTiao.setWendu(-100);//直接通过set赋值
        System.out.println(kongTiao.getWendu());
        }

通过private关键字将温度私有化,通过set方法去给温度设置,并在set方法里面设置范围为31~60.既能隐藏了对象的属性,又可以隐藏实现的细节。

1.2、封装的作用

提高城乡的可复用性和可维护性 ,保护私有数据

二、继承

2.1、什么是继承

继承面向对象软件技术当中的一个概念,与多态封装共为面向对象的三个基本特征。继承可以使得子类具有父类的属性方法或者重新定义、追加属性和方法等。
继承(英语:inheritance)。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。

2.2、继承的作用

提高代码可重用性 起到扩展功能的作用
减少代码冗余
书写一个父类,子类可以对父类进行扩展
子类可以对父类重新定义

2.3、继承的方法格式

java语言是单继承的

[权限修饰符] class 子类名 extends 父类名{
    
    }

继承关键字extends

public protected 同包默认的属性和方法 private 不能继承
private 的属性可以通过set和get来取值赋值

2.4、方法的重写

Java和其他一些高级面向对象的编程语言中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖

重载(overload):发生在同一个类中 , 方法名相同,参数列表不同,不考虑返回值。

​重写(override):发生在父子类中,子类继承父类的方法,方法名相同,参数也相同,但是实现方法体不同。

注意

  • 必须保证父子类中重写的方法,方法名相同,参数列表相同。
  • 子类方法的返回值必须等于父类方法的返回值范围。&
  • 子类方法的权限必须要大于等于父类方法的权限(不包括 private)。
  • 私有的不能被继承
  • 构造方法不能直接继承,但是子类的构造方法中必须调用父类的构造方法,如果不写就调用无参构造
  • 调用的时候必须是代码体第一句代码块

toString()方法
Object类 是所有类的基类
任何类都是Object类的直接子类或者间接子类,在Object类中有一个toString()方法。当输出一个对象时,
先调用当前类的toString()方法,如果当前类没有toString() ,就去找当前类的父类,看是否有toString()方法,如果过父类也没有,就去找Object类中的toString()方法并运行。

public class Person {
    
    
    //父类
    private String name;
    private int age;
    protected String sex;//protected 这个变量在一个包里都能调用
    private   String address;
    public  Person(){
    
    
        System.out.println("无参构造函数");
    }
    public Person (String name,int age){
    
    
        System.out.println("由此观之");
        this.name=name;
        this.age=age;
    }

    public String getName() {
    
    
        return name;
    }
    }
public class Kong extends Person{
    
    
    //子类
    //this 当前--调用当前对象的  如果没有会调用父类的
    //super父类   直接调用父类的
    String sushe;
    public  void sd(){
    
    //方法覆盖
        System.out.println("sadfsadf");
    }
    void  ssd(){
    
    
        super.sd();
    }

    public Kong(){
    
    
        System.out.println("kong");
        //super();//调用父类无参构造函数
    }
    public  Kong (String name,int age){
    
    
        super(name,age);
        this.sushe=sushe;
    }

}
 public static void main(String[] args) {
    
    
       Kong stu =new Kong("zs",45);//调用有参
        System.out.println(stu.getName());
        //Person stu1=new Person();
        Kong stu2=new Kong();//调用无参构造函数

    }

2.5、super关键字和this关键字

作用:如果子类既想使用自己的方法,又想使用父类的成员变量和成员方法,需要通过super关键字。
super:
在子类中的成员方法直接访问父类的成员变量和成员方法
在子类的构造方法中直接访问父类的构造方法
this: this就表示当前这个对象;当前的这个

2.6、继承中的构造方法

特点:
构造方法不能被继承(是一个类独有的)
创建的子类对象一定是先调用父类构造在调用子类构造
子类通过super关键字调用父类的有参构造, 无参super() 有参super(参数列表) 。
super父类构造调用,必须是子类构造中的第一行语句。(并且一个子类构造,只能调用一次super())。必须先有父再有子。

   public Kong(){
    
    
        //System.out.println("kong");
        super();//调用父类无参构造函数  必须第一行
    }

继承的特点: java中类与类之间是单继承的。但是可以多级继承。一个父类可以有多个子类。

一个子类只能有一个父类 但是一个父类可以有多个子类

2.7、Object类

Object是所有类的父类,任何类都默认继承Object
理论上Object类是所有类的父类,即直接或间接的继承java.lang.Object类。由于所有的类都继承在Object类,因此省略了extends Object关键字。
equals()方法 在比较字符串时 比较的是俩个字符串的值。但是实际上equals方法比较的是地址值。

Object类中 equals() 方法的源码:

为什么String就可以用equals()比较值呢
因为String类中重写了equals()方法,所以可以比较值。

三、final关键字

3.1final作用

四、基本类型和包装类

4.1、概念

基本数据类型使用非常方便,但是我们没有对应的方法去操作它们,可以通过一个类把基本数据类型包装起来,在类中定义一些方法,这个类就叫包装类。我们可以使用包装类中定义的方法去操作基本数据。
基本数据类型:byte Byte    short Short  int  Integer  long  Long  float Float 等

4.2、自动装箱和拆箱

既然有了基本类型和包装类型,肯定有些时候要在它们之间进行转换。把基本类型转换成包装类型的过程叫做装箱(boxing)。反之,把包装类型转换成基本类型的过程叫做拆箱(unboxing)。

4.3基本数据类型和字符串的转换

区别

包装类型可以为 null,而基本类型不可以
包装类型可用于泛型,而基本类型不可以
基本类型比包装类型更高效
两个包装类型的值可以相同,但却不相等
总结

继承:
关键字extends
单继承 一个类只能有一个父类
子类可以继承父类:public protected 同包默认的属性和方法,不能继承private私有方法
子类可以书写自己的属性和方法
子类可以重写父类的方法
在子类中可以通过super调用父类的方法和属性。super.方法名/属性名
父类构造不能继承,但是必须调用
new子类的时候,子类构造的第一行必须调用父类的构造方法
如果子类不写super(),系统默认调用父类无参构造
.可以通过super(参数)调用有参,并且必须第一行,并且只能有一个super()。
如果通过子类调用方法,优先调用自己的方法。子类重写方法之后调用自己的方法,如果子类没有重写方法则使用父类的方法。
所有类都直接或者间接的继承了Object类。Object是所有类的基类,超类。

Guess you like

Origin blog.csdn.net/qq_45438019/article/details/119535296