面相对象三大特征-类与对象

本文详细介绍了Java中的面向对象编程思想,包括面向过程与面向对象的区别,对象和类的概念,类的定义、属性、方法、构造函数,以及对象的创建与使用。此外,还涵盖了封装、继承、多态等核心概念,强调了访问权限修饰符的作用,并提供了实例代码来说明这些概念的应用。
摘要由CSDN通过智能技术生成

复习

编程思想

面向过程
思想:
    只考虑事物的发展顺序
面向对象
思想:
    先考虑事物中存在哪些对象,再建立对象与对象之间的关系

对象的概念

生活中
    真实存在的事物
代码中
    万事万物皆对象(具有指向性)

类的概念

本质:就是概念或模版(只是方便创建对象的工具罢了)
    多个对象抽取共同点形成的概念即为类

类与对象的关系

一个类中可以有多个对象,多个对象可以属于同一个类
​
生活中:先有对象,后有类(类是从多个对象中抽取共同点形成的概念)
代码中:先有类,后有对象

类的定义与组成

定义

语法
    访问权限修饰符 class类名{
    
    }

组成

属性

作用:
    描述事物的静态特征,如人的身高,姓名,性别,年龄等
​
位置:
    类中方法外
​
别名:
    成员变量,局部变量
​
注意事项:
    属性有默认值,基本数据类型默认为0,引用数据类型默认为null
    
成员变量与局部变量的区别:
    成员变量
        位置:类中方法外
        默认值:有
        作用域:当前类中皆可
        生命周期:随着对象创建而生成,随着对象销毁而销毁
    局部变量
        位置:方法中
        默认值:无
        作用域:当前方法
        生命周期:随着方法生成而生成,随着方法执行完而销毁

方法

作用:
    描述事物的动态特征,如吃饭,喝水,打游戏等
    
位置:
    类中方法外
​
别名:
    函数
​
注意:
    一个类汇总不能出现两个或两个以上,方法名相同,形参列表也相同的方法
    
特殊情况:
    重载:
        在同一个类中,方法名相同,形参列表不同的方法

构造函数

作用:
    创建该类对象
    
位置:
    类中方法外
​
语法:
    访问权限修饰符 构造函数名(形参列表){
        方法体
    }
​
注意:
    1.构造函数没有返回值,也没有返回值类型
    2.使用new关键字
    3.构造函数名必须与类名一致☆
    4.一个类中没有构造函数,系统会自动提供一个无参构造函数.如果有则不提供
    5.一个类中可以有多个构造函数
    6.不能形成递归

对象的创建与使用

创建

语法:
    数据类型 对象名 = new 构造函数(实参列表);
​
此行代码做了哪些操作
    1.使用new关键字在堆内存中开辟一片运行空间
    2.给属性赋初值
    3.执行构造函数中的代码
    4.将堆中的地址,赋值给栈中引用

使用

操作属性

获取属性值
    语法
        对象名.属性名
​
修改属性值
    语法
        对象名.属性名 = 值;

调用方法

语法
    对象名.方法名(实参列表);

this

概念:
    谁调用this所在的方法,this就代表谁
场景1
	当局部变量与属性名重名时,用于区分
class A{
    private String name;//属性名为name
    public A(String name){//形参name,也是局部变量
        this.name = name;
        //就近原则后面的name在方法中,离方法最近,所以代表的是形参name
        //重名时this代表的是属性name
    }
}
场景2
	当在本类中使用本类的属性或方法时,默认使用this调用
	此时this可以忽略不写
class A{
    private String name;
 name = "aaa";
 //此时就忽略了this   this.name
 public void eat(){}
 public void eatTest(){
     eat();
     //此时也是忽略了this  this.eat()
 }
}
场景3
    在本类构造函数中调用本类其他构造函数
    语法
        this(实参列表);
class A{
    private String name;
    //无参构造
    public A(){}
    //全参构造
    public A(String name){
        //调用无参构造,如果调用的是有参的就在()里加上参数
        this();
    }
​
}
注意:
    必须在构造函数第一行


今日

面相对象三大特征

封装

概念:
	包装一段代码
优点:
	1.方便使用
	2.保护内部
	3.降低耦合度
	4.提高复用率
具体体现
	变量:
		封装着一个值或内存地址
	方法:
		封装着一段代码
	类:
		封装着属性,方法,构造函数
	...
	java中的封装无处不在
包
    本质:
        就是一个src下的文件夹
    
    作用:
        对java文件进行分类存储,使其便于寻找
    
    创建:
        选择src
        点击鼠标右键
        点击new
        选择package
        填写包名
        
    包名:
        命名规则:全小写
        潜规则:
            com.公司名称缩写或项目名称.分类名称
        
    注意:
        .代表下一级文件
导包
    作用:
        在当前java文件中使用其他文件夹下的类,此时需要导包
        
    语法:
        import 包名.类名;
        
    位置:
        类上
    
    关键字:
        import
        importjava.util.*;
        表示导入java.util下的所有类

访问权限修饰符

作用:
    限制其修饰的内容的使用范围
关键字				中文名				范围
public				公共的				当前项目中
protected			受保护的			当前包下或继承关系中
不写					默认的				当前包下
private				私有的				当前类下
经验
	属性使用private修饰
	方法使用public修饰
	
	1.只要写类,就直接编写无参构造和全参构造
	2.私有化所有属性
	3.提供公共的get和set方法,(get获取属性,set修改属性值)

继承

概念
	生活中:晚辈继承长辈遗留下的精神或物质遗产
	代码中:多个类抽取共同点形成类,此时该类与这几个类就可以有继承关系
优点
    子类将拥有父类所有的属性和方法(构造函数除外)
    提高复用率
语法
    访问权限修饰符 class 子类名 extends 父类名{}
注意
    1.一个类只能有一个父类(单继承)
    2.而一个父类可以有多个子类
    3.子类构造函数中默认调用父类的无参构造函数
    
    4.子类构造函数中必须调用父类的构造函数☆
    
    object是所有类的父类,如果一个没有明确的父类,默认继承object
    
    父类的别名:基类,根类
    
    开闭原则:
        对修改关闭
        对扩展打开

重写

在继承关系中
子类中方法与父类的方法,方法名相同,形参列表也相同
子类该方法的访问权限修饰符不能小于父类的
子类该方法的返回值类型与父类一致

super

含义:
	谁调用super所在的方法,super就表示谁的父类对象
场景1
	当子类重写父类方法后,在子类中使用super区分,是子类重写的方法还是父类提供的方法
	
super.方法名(实参列表)		父类提供的方法
方法名(实参列表)			子类重写后的方法
场景2
	当子类属性名与父类属性名重名时,使用super区分

super.属性名		父类属性
属性名				子类属性
public class Test {     //环境类
    public static void main(String[] args) {
        Zi zi = new Zi();
        zi.method();
    }
}
class Fu{       //父类
    public String text =  "父";
    public void method(){
        System.out.println("父类方法");
    }
}
class Zi extends Fu{        //子类
    public String text = "子";
    public Zi(){        //子类无参构造
        this("xxx");
    }
    public Zi(String text){//子类有参构造
​
    }
    public void method(){   //子类重写父类方法
​
        System.out.println("子类方法");
        //谁调用super所在的方法,super就表示谁的父类对象
        super.method();     //子类调用super,super就表示为"Zi"的父类"Fu"的方法
        System.out.println(super.text);//同上,父类的text
        System.out.println(text);//就近text,子类的
    }
}
​

多态

概念:
    一个事物的多种形态

物的多态

子类对象转换为父类对象
    自动转换
    语法
        父类名 对象名 = 子类对象;
​
父类对象转换为子类对象
    强制转换
    语法
        子类名 对象名= (子类名)父类对象;
    
    有分险
    有分险
    有分险
class Fu{}
class Zi{}
class Test{
    public static void main(String[] aaa){
        Zi zi = new Zi();
        //子类对象转换为父类对象
        //自动转换
        Fu fu = zi;
        
        Zi zi = (Zi)fu;//父类对象转换子类对象
    }
}

instanceof

作用:
    判断该对象是否属于该类
注意:
    判断的对象与类之间要存在关系
语法:
    对象名 instanceof 类名
    最后得出个boolean值,可以用变量接收
    boolean 变量名 = 对象名 instanceof 类名;
    如果为true,表示对象属于该类
    如果为false,表示对象不属于该类
    如果IDEA提示此行代码有问题,则对象与类无关系

事的多态

重载
    要求:在同一个类中,方法名相同,形成列表不同
重写
    要求:同上分重写
​
注意:
    当子类对象转换为父类对象后,调用重写的方法,依旧执行的是子类重写后的方法,毕竟本质上还是子类.


作业

1,整理笔记
​
2,面向对象基础)根据注释,把下面代码补充完整  
//定义一个Dog 类
class Dog{
//定义一个name 属性,该属性为String 类型
______________________;
//定义一个age 属性,该属性为int 类型
______________________;
//定义一个sexual 属性,该属性为boolean 类型
//true 表示为公,false 表示为母
______________________;
public Dog(){}
    public Dog(String name, int age, boolean sexual){
    //分别根据参数,设置Dog 类的属性
    }
    public void play(){
        System.out.println(name + "play");
    }
    public void play(int n){
        System.out.println(name + "play" + n + "minutes");
    } 
}
public class TestDog{
public static void main(String args[]){
Dog d;
//创建一个Dog 对象,利用带参数的构造函数
//名字为joy,年龄为2 岁,性别为母
_________________;
//调用Dog 对象无参的play 方法。
_________________;
//调用Dog 对象有参的play 方法,参数为30
_________________;
} 
}
​
3,面向对象基础)写一个Worker 类,并创建多个Worker 对象。
1) 为Worker 类添加三个属性,1)String 类型的name,表示工人的姓名;
2)int 类型的age,表示工人的年龄;3)double 类型的salary,表示工人
的工资。
3) 为Worker 类添加两个构造方法,1)公开无参构造方法;2)接受三个参
数的构造方法,三个参数分别为字符串、int 和double 类型。
4) 为Worker 类添加两个work 方法,一个无参,另一个带整数参数,表示
工人工作的时间(为多少小时)。Worker如下的属性的类型以及构造方法相关的参数
        name:String
        age:int
        salary:double
        Worker()
        Worker(name:String,age:int,salary:double)
        work();
        work(hours:int) 
​
        在测试类中进行测试 工人类
        
4,有如下代码
​
class Super{
​
  private void method(){}
​
  }
​
  class Sub extends Super{
  //1
  }
}
在//1 处,能编译通过的代码为:
​
A. public int method(){return 0;}
​
B. void method(){}
​
C. void method(int n){}
​
D. private void method(){}
​
5,什么是多态,子类对象转换为父类对象后,调用重写的方法会怎样?
​
6,设计一个台灯类(Lamp)其中台灯有灯泡类(Buble)这个属性,
还有开灯(on)这个方法。设计一个灯泡类(Buble),
灯泡类有发亮的方法,其中有红灯泡类(RedBuble)和绿灯泡类(GreenBuble)
他们都继承灯泡类(Buble)一个发红光,一个发绿光
​
7,看程序,写运行结果
​
(继承、对象构造过程)有以下代码
class ClassA{
    public ClassA(){
        System.out.println("ClassA()");
    } 
}
class ClassB{
    public ClassB(){
        System.out.println("ClassB()");
    } 
}
class ClassC extends ClassA{
    public ClassC(){
        System.out.println("ClassC()");
    } 
}
class ClassD extends ClassB{
    private ClassA ca = new ClassA();
    private ClassC cc;
    public ClassD(){
        System.out.println("ClassD()");
    }
    public ClassD(int i){
        cc = new ClassC();
        System.out.println("ClassD(int)");
    } 
}
public class TestConstructors{
    public static void main(String args[]){
        ClassD cd1 = new ClassD();
        ClassD cd2 = new ClassD(10);
    } 
}
​
8,定义一个动物类,里面有一个方法voice(),
        定义一个类Cat,实现voice方法
        然后增加一种新的动物类型:Pig(猪),实现voice()方法。
        定义一个Dog类,实现voice方法
        定义一个Store(宠物店)类的getInstance方法:
        如果传入的参数是字符串dog,则返回一个Dog对象;
        如果传入pig,则返回一个Pig对象;否则,返回一个Cat对象。
        
        提示:字符串进行判断 通过equals(字符串)方法 
        
9,定义榨汁机JuiceMachine 有榨汁方法makeJuice,传入相应的水果。
        如果传入的是Apple 输出   "流出苹果汁"
       传入的是Orange 输出  "流出橙汁"
       传入的是Banana 输出  "流出香蕉酱"
       
10,假如我们在开发一个系统时需要对员工类类进行设计,程序员是员工,包含3个属性:姓名、工号以及工资。
    经理也是员工,除了含有员工的属性外,另为还有一个奖金属性。
    请使用继承的思想设计出程序员类和经理类。要求类中提供必要的方法进行属性访问。
    (将昨天的这道题,自己分析员工的功能,子类体现出方法重写,测试的时候使用多态方式进行测试)
    
11,什么是方法重写,什么是方法重载
​
12,附件题,小明宠物医院

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值