Java面向对象编程,基础进阶教学视频学习---百知教育--胡大大

视频地址
https://www.bilibili.com/video/BV1xE41137Qy?p=1

目录

对象
P01-面向对象概念-1 1:09:22
P02-面向对象概念-2 52:28
P03-方法的重载 48:38
P04-对象的创建和使用 47:41
P05-对象和引用 39:50
P06-this关键字 30:16
三大特性
P01-封装 1:14:55
P02-继承关系 1:27:13
P03-方法的覆盖 27:08
P10-super关键字 1:07:04
P11-单继承 16:49
P12-继承习题课 42:11

对象

P01-面向对象概念-1 1:09:22

一、 面向对象思想  
1.对象组成:
1)属性   对象有什么
2)方法  对象能做什么  对外提供的行为  

2.对象之间的关系
1) is a     汽车与车关系        继承关系
2) has a    汽车与发动机的关系   关联关系  一个对象是另一个对象的属性 
3) use a    司机开汽车          依赖关系       一个对象调用另一个对象的方法

3.面向对象思想
面对需求, 找出解决问题的对象, 让对象之间建立适当的关系 

二、 面向对象编程思想 
模拟现实世界,用计算机中的对象,模拟现实世界中的对象 
抽象:    
用计算机中类型的概念,对象现实世界中类的概念
类: 对象共性的抽象,

三、 如何定义一个JAVA类
类包含: 属性,方法,构造方法 
属性 :
     成员变量特点
     1) 成员变量有默认值  (0: 数值的7种   false boolean  null 对象类型 )
     2) 成员变量作用范围,整个类
     3)成员变量与局部变量可以同名  

方法: 行为 函数
     方法声明: 修饰符  返回值  方法名(参数列表) 异常 
     方法实现{}
构造方法:特殊方法
     1) 没有返回值类型
     2) 方法名必须与类名相同,包括大小写
     3) 不允许手工调用  
     4)如果类没有定义任何构造方法,编译器自动提供默认无参构造方法
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

P02-面向对象概念-2 52:28

在这里插入代码片
  • 1

P03-方法的重载 48:38

在这里插入图片描述

方法重载:(也叫编译时多态)
    1. 参数个数不同
    2. 参数类型不同
    3. 参数类型排列不同
    4. 构造方法也可以重载
为什么有重载的存在 
重载的作用: 一个类的同一行为,由于参数不同,造成的实现差异,对对象的调用者是屏蔽的 


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

P04-对象的创建和使用 47:41

对象的创建过程:
   1. 分配堆空间    属性被赋值为 默认值 
   2. 初始化属性    属性被赋值为 初始值   
   3. 调用构造方法  属性被赋值为 构造参数 

package day6;
public class TestClass{
	public static void main(String[] args){
         Student s =new Student();
         System.out.println(s.name);
         System.out.println(s.age);
         System.out.println(s.score);
          s.eat();    
	}
}

class Student{
	String name;
	int age;
	double score;
	public Student(){}
	public Student(String name){
		this.name=name;
	}

	void eat(){
		System.out.println("eating ....");
	}
	void sleep(){
		System.out.println("sleeping ... ");
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

P05-对象和引用 39:50

在这里插入图片描述

对象都是存储在堆空间内的
String是引用类型,要注意String不是8种基本类型
成员变量  VS  局部变量
简单变量  VS  引用  
   简单变量:  8中基本类型 存储值  作为函数的参数时候, 实参 形参 值相同 
   引用:                存储地址  作为函数参数时候  , 实参形参 地址相同  ,指向同一对象  

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
package day7;
public class TestReference{
	public static void main(String[] args){
        int a=10;
        int b=a;
        b++;
        System.out.println(a);  // 10 
        MyClass mc1 =new MyClass();
        MyClass mc2 =mc1;
        mc2.value++;
        System.out.println(mc1.value);  //21 

        MyClass mc3 =new MyClass();
        changeValue(mc3);
        System.out.println(mc3.value);  //21


	}


	static void changeValue(MyClass mc){
		mc.value++;
	}
}

class MyClass{
	int value=20;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

P06-this关键字 30:16

this  代表对象自己 就是当前对象   
对this 调用,必须是构造器第一个语句   ,见下图 
  • 1
  • 2

在这里插入图片描述

面向对象三大特性

P01-封装 1:14:55

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

对象有明确的边界,对象边界对对象内部数据起到保护作用,隔离作用
可以利用修饰符,定义类的属性,方法 是否能被外部访问
    public 
    private 
    默认       属性或方法只能被同包的

访问方法:   get属性名();   set属性名();
对于boolean类型,get方法用is方法替换,如:getMale() 通常用isMale();

现实中文一个女生年龄:女生通过getAge()方法返回年龄 
    1. 认识的人问此女生  会回答你,可能偏小
    2. 生病时,医生问此女生   回答一定真实
    3. 陌生人问此女生    女生会回答,滚 ,流氓  ....   
这就是封装了,如果没有封装,直就是age 属性的公共方法了;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

最简单的方式访问类
公共属性的方式

package day8;
public class TestEncapsulation{
	public static void main(String[] args){
          CredictCard card=new CredictCard();
          System.out.println(card.password);
          card.password ="654321";
          System.out.println(card.password);
	}
}
class CredictCard{
	String password="123456";
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

通过方法访问
属性私有化
属性访问通过方法完成,可以在方法中增加验证身份逻辑,来保护数据本身

在这里插入图片描述

package day8;
public class TestEncapsulation{
	public static void main(String[] args){
          CredictCard card=new CredictCard();
        //  System.out.println(card.password);
        //  card.password ="654321";
        //  System.out.println(card.password);

         System.out.println( card.getPassword());
          card.setPassword("654321");
         System.out.println( card.getPassword());
	}

}

class CredictCard{
	private String password="123456";
	public String getPassword(){
		// could do someting to protect the access ,such as role 
		//  只有 管理员  &&  用户本身可以访问此方法  ,其他用户不可以访问此方法,(下同)
		return password;
	}
	public void setPassword(String password){
		this.password =password;
	}
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

P02-继承关系 1:27:13

20201228 55:50
子类 is a 父类 父类 – 子类 一般 – 特殊 父类有什么 ,子类就有什么
继承: 从可重用的角度,可扩展角度,子类自动继承父类,可以在父类基础上扩展

LSP:里氏代换原则 : 将父类替换为子类时,依然合乎逻辑
LSP 的经典案例: 长方形 , 正方形 ,
数学老师教:正方形 is a 特殊的长方形
计算机老师: 正方形 is a 特殊的矩形
长方形 is a 特殊的矩形
父类: 一定个各种子类的抽象,将子类的共性提炼出来形成的。

没有继承前的定义

package day8;
public class TestInheritance{
	public static void main(String[] args){
         
	}
}

class Animal{
	 int age;
	 char gender;
	 public void eat(){
	 }
	 public void sleep(){
	 }
}

class Dog{
	int age;
	char gender;
	public void eat(){

	}
	public void sleep(){

	}
	public void shout(){

	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

dog 继承 了 animal ,下面是示例

package day8;
public class TestInheritance2{
	public static void main(String[] args){
         Animal2 ani= new Dog2();
         ani.eat();
	}
}

class Animal2{
	 int age;
	 char gender;
	 public void eat(){
	 	System.out.println("eating by Animal2 ");
	 }
	 public void sleep(){
	 }
}

class Dog2 extends Animal2{
	//int age;
	//char gender;
	@Override
	public void eat(){
	 	System.out.println("eating by Dog2 ");
	}
	//public void sleep(){
	//}
	public void shout(){

	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

P03-方法的覆盖 27:08

P10-super关键字 1:07:04

P11-单继承 16:49

P12-继承习题课 42:11

  • 点赞
  • 评论
  • 分享
  • 收藏
  • 打赏
  • 举报
  • 关注
  • 一键三连

    点赞Mark关注
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值