JAVA学习笔记22(面向对象三大特征)

1.面向对象三大特征

​ *封装、继承和多态

1.1 封装

封装(++encapsulation++ )就是把抽象出的数据[属性]和对数据的操作*[方法**]封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作[方法],方能对数据进行操作

1.封装的理解和好处

1.隐藏实现细节

2.可以对数据进行验证,保证安全合理

2.封装的实现步骤

1.将属性进行私有化private [不能直接修改属性]

2.提供一个公共的 (public)set方法,用于对属性判断并赋值

public void setXxx(类型 参数名)

{

​ //Xxx表示某个属性

​ 属性 = 参数名;

}

3.提供一个公共的get方法,用于获取属性的值

public XX getXxx()

{

​ return xx;

}

java 复制代码
class Person
{
	publci String name;
    private int age;
    private double salary;
    
    public String getName()
    {
		return name;
    }
    
    public void setName(String name)
    {
		this.name = name;
    }
}

1.2 继承

​ *解决代码复用性

​ *代码的扩展性和维护性提高了(如果要加方法,只需在父类中加,可以扩展到所有子类)

​ *当多个类存在相同的属性(变量)和方法时,可以从这些类中抽象出父类,在父类中定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法

1.继承的基本语法

java 复制代码
class 子类 extends 父类
{

}

1.子类就会自动拥有父类定义的属性和方法

2.父类又叫超类(super),基类

3.子类又叫派生类

2.继承的细节

1.子类继承了所有的属性和方法,但是私有属性和方法不能再子类直接访问,要通过公共的方法去访问

2.子类必须调用父类的构造器,完成父类的初始化

java 复制代码
public class Sub extends Base
{
    public Sub()	//子类
    {
		super();	//默认调用父类的无参构造器,写和不写都一样
    }
}

3.当创建子类对象时,不管使用子类的那个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中用super去指定使用父类的哪个构造器完成对父类的初始化工作,否则,编译会不通过

4.如果希望指定去调用父类的某个构造器,则显式的调用一下:super(参数列表)

5.super在使用时,必须放在构造器第一行

6.super()和this() 都只能放在构造器第一行,因此这两个方法不能共存在一个构造器 //this()表示调用子类的构造器

7.java所有类都是Object类的子类,Object是所有类的基类

8.父类构造器的调用不限于直接父类,将一直往上追溯知道Object类(顶级父类)

9.子类最多只能继承一个父类(直接继承),即java中时单继承机制

10.不能滥用继承,子类和父类之间必须满足is--a的逻辑关系

java 复制代码
public class ExtendsTheory
{
	public static void main(String[] args)
    {
        Son son = new Son();//内存的布局
        System.out.println(son.name);//返回的就是大头儿子
        System.out.println(son.age);	//如果子类没有这个属性就直接看父类,父类为39
                System.out.println(son.hooby);	//父类没有就访问爷爷类
    }
}

class GrandPa
{
    String name = "大头爷爷";
    String hobby = "旅游"
}

class Father extends GrandPa
{
	String name = "大头爸爸";
    int age = 39;
}

class Son enxtends Father
{
    String name = "大头儿子";
}

1.3 super关键字

​ *super代表父类的引用,用于访问父类的属性、方法、构造器

1.基本语法

1.访问父类的属性,但不能访问父类的private属性

java 复制代码
super.属性名;

2.访问父类的方法,不能访问父类的private方法

java 复制代码
super.方法名(参数列表)

3.访问父类的构造器

java 复制代码
super(参数列表);

只能放在构造器的第一句,只能出现一句

2.super给编程带来的遍历/细节

1.调用父类的构造器的好处(分工明确,父类的属性由父类初始化,子类的属性由子类初始化)

2.当子类中有和父类中的成员(属性和方法)重名时,为了访问父类的成员,必须通过super,如果没有重名,使用super、this、直接访问时一样的效果

3.super的访问不限于直接父类,如果爷爷类和本类中有同名的成员,也可以用super去访问爷爷类的成员,如果基类(上级类)中都有同名成员,使用super访问遵循就近原则。

3.super和this的比较

1.4 方法重写/覆盖(Override)

​ *基本介绍

方法覆盖(重写)就是子类有一个方法,和父类的++某个方法的名称、返回类型、参数一样++,那么我们就说子类的这个方法覆盖了父类的方法

java 复制代码
class Animal
{
	public void cry()
    {
		System.out.println("动物再叫...")
    }
}

publci class Dog extends Animal
{
	public void cry()
    {
        System.out.println("小狗汪汪叫...");
    }
}

1.注意事项和使用细节

​ *方法重写也叫方法覆盖

​ *需满足条件:

1.子类的方法的参数列表方法名称 ,要和父类方法的参数,方法名称++完全一样++

2.子类的返回类型和父类方法返回类型一样,或者是父类返回类型的子类

​ *比如 父类 返回类型是Object,子类方法返回类型是String(String是Object的子类)

3.子类方法不能缩小父类方法的访问权限

public > protected > 默认 > private

相关推荐
P.H. Infinity1 分钟前
【RabbitMQ】04-发送者可靠性
java·rabbitmq·java-rabbitmq
生命几十年3万天5 分钟前
java的threadlocal为何内存泄漏
java
caridle16 分钟前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
^velpro^21 分钟前
数据库连接池的创建
java·开发语言·数据库
苹果醋325 分钟前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
秋の花30 分钟前
【JAVA基础】Java集合基础
java·开发语言·windows
小松学前端32 分钟前
第六章 7.0 LinkList
java·开发语言·网络
Wx-bishekaifayuan39 分钟前
django电商易购系统-计算机设计毕业源码61059
java·spring boot·spring·spring cloud·django·sqlite·guava
customer0844 分钟前
【开源免费】基于SpringBoot+Vue.JS周边产品销售网站(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·开源
全栈开发圈1 小时前
新书速览|Java网络爬虫精解与实践
java·开发语言·爬虫