java面向对象编程(中级)

【零基础 快速学Java】韩顺平 零基础30天学会Java 笔记

IDEA

IDE(集成开发环境)
设置一些快捷键吧

ctrl+d删除
alt+\补全代码
ctrl+alt+向下光标复制
alt+\补全代码
ctrl+\注释
alt+insert生成构造器
ctrl+H学习继承
ctrl+B可以选择定位到哪个类的方法
在后面加.var自动分配变量名

file->setting->editor->Live templates
查看有哪些模板快捷键/可以自己增加模板|

1. 包

语法
package com.hspedu
1.package 关键字表示打包
2.com.hspedu:表示包名

本质:创建不同的文件夹来保存 类文件 ,
在这里插入图片描述
在这里插入图片描述
常用的包

java.lang.* //lang包是基本包,默认引入,无需再引入
java.util.*//util包,系统提供的工具包,工具类,使用Scanner
java.net.*//网络包,网络开发
java.awt.*//java界面开发,GUI


2. 访问修饰符

在这里插入图片描述
在这里插入图片描述
只有默认的和public才能修饰类

3. 封装(encapsulation)

封装encapsulation就是把抽象出的数据【属性】和对数据的操作【方法】封装在一起,数据被保护在内部,程序的其他部分只能通过被授权的操作【方法】,才能对数据进行操作。

好处:
1.隐藏细节 :方法(连接数据库)<————调用(传入参数)
2.可以对数据进行验证,保证安全合理

实现:

  1. 将属性进行私有化
  2. 提供一个公共的set方法,用于对属性判断并赋值
    public void setXXX(类型 参数名){
    //加入数据验证的业务逻辑
    属性=参数名;
    }
    
  3. 提供一个公共的get方法,用于获取属性的值
	public XX getXXX(类型 参数名){
	//权限判断
	return xx;
	}

alt+insert快捷键进入Generate 然后选择Getter and Setter快速构建

java封装与构造器

如何避免通过构造器绕过验证?
在构造器中使用setXXX()
在这里插入图片描述

4. 继承

在这里插入图片描述
在这里插入图片描述
1.子类继承了所以的属性和方法,但是私有属性和方法不能在子类直接访问,要通过公共的方法访问
2.子类必须调用父类的构造器,完成父类的初始化
在这里插入图片描述
3.当创建子类对象的时候,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中用super去指定使用父类的哪个构造器完成对父类的初始化工作。否则编译不会通过。
4.如果希望指定去调用父类的某个构造器,则显示的调用一下:super(参数列表)
在这里插入图片描述
5.super在使用时,必须放在构造器第一行(super只能在构造器中使用)
6.super()和this()都只能放在构造器第一行,因此这两个方法不能共存在一个构造器(this()用于调用本类的构造器)
this()表示调用构造方法,此种调用只能用在构造方法中,即构造方法中调用构造方法this(实参)。
1、this()、this(实参)必须方法构造方法的第一行
2、在有参数构造方法中调用无参数构造方法this();在无参数的构造方法中调用有参数的构造方法this(实参)

7.java所有类都是object类的子类
8.父类构造器的调用不限于直接父类,将一直往上追溯到Object类(顶级父类)
9.子类最多只能继承一个父类(指直接继承),即java中是单继承机制
10.不能滥用继承,子类和父类之间必须满足is-a的逻辑关系

本质:
当子类对象创建好以后,内存中建立了一种查找关系
在这里插入图片描述

当运行第一句时,首先在方法区加载类,依次加载object Grandpa Father Son 并有指向关系,然后在堆中开辟空间
按照查找关系来返回信息

5. 多态

方法或对象具有多种形态。是面向对象的第三大特征,多态是建立在封装和继承基础之上的
多态的具体体现:

1.方法的多态

class C{
	public static void main(String[] args)
	{
		//方法重载体现多态
		A a = new A();
		System.out.println(a.sum(10,20));
		System.out.println(a.sum(10,20,30));
		//我们通过不同的参数格式去调用sum方法,就会去调用不同的方法,
		//因此对sum方法来说,就是多种状态的体现
		
		//方法重写体现多态
		B b=new B();
		a.say();
		b.say();
	}
}
class B{
	//父类
	public void say(){
	System.out.println(" B say()方法被调用")
	}
}
class A extends B{
	//子类
	public int sum(int n1,int n2)
	{//和下面的sum构成重载
		return n1+n2;
	}
	public int sum(int n1,int n2, int n3)
	{
		return n1+n2+n3;
	}
}

2.对象的多态(多态的核心)

  1. 一个对象的编译类型和运行类型可以不一致
  2. 编译类型在定义对象时,就确定了,不能改变
  3. 运行类型是可以变化的。
  4. 编译类型看 定义时 = 号的左边,运行类型看 =号的右边
    eg:
    Animal animal = new Dog(); animal 编译类型是Animal,运行类型Dog。
    animal = new Cat(); animal 的运行类型变成了Cat,编译类型仍然是Animal。

多态的前提是:两个对象(类)存在继承关系
多态的向上转型
1.本质:父类的引用指向了子类的对象
2.语法:父类类型 引用名 = new 子类类型();
3.特点:编译类型看左边,运行类型看右边。
可以调用父类中的所有成员(需遵守访问权限),不能调用子类中特有成员;最终运行效果看子类的具体实现,也就是说调用方法时要从子类开始查找 !
(因为在编译阶段,能调用哪些成员,是由编译器类型来决定的)

	Animal animal = new Cat();
	animal.eat();

多态的向下转型
1.语法:子类类型 引用名 = (子类类型)父类引用;
2.只能强转父类的引用,不能强转父类的对象
3.要求父类的引用必须指向的是当前目标类型的对象
4.可以调用子类类型中所有的成员

6. super

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7. overwrite(重写)

方法覆盖(重写)就是子类有一个方法,和父类的某个方法的名称,返回类型,参数相同,那么我们就说子类的这个方法覆盖了父类那个方法
在这里插入图片描述
方法重写又叫方法覆盖,需要满足下面的条件:
在这里插入图片描述
public > protected > 默认 > private

8. Object类详解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值