手机扫码查看
面向对象
想要知道对象是什么,就先知道什么是程序。
什么是程序?
程序是为了模拟现实世界,解决现实问题,而使用计算机语言编写的指令集和。
如:支付宝是为了生活便捷,收付款功能。美图是为了修图和美颜的。
讨论:世界是由什么组成的?
相信大家的答案都不一致,都很抽象。
在程序猿眼里,世界的组成最为明确:世界是由无数个 对象 组成的
那什么是对象?
面向对象的思想(Object Oriented Programming)
一切客观存在的事物都是对象,万物皆对象。
任何对象,一定具有自己的 特征 和 行为。
对象的特征为:一般称为属性,为名词,代表对象有什么。
对象的行为有:一般称为方法,为动词,代表对象能做 什么。
现实生活中的对象:
如:手机
属性为品牌、颜色、型号….
方法为接打电话、收发短信…
程序中的对象
如何使用程序模拟现实世界,解决现实问题?
首先,在程序当中,必须具有和现实生活中相同的问题,用以模拟现实世界。
然后,使用程序中的对象代表现实中的对象,并执行操作,进而解决现实问题。
如何在程序中创造出与现实中一样的对象?
现实中的对象多数来自于 “ 模板 ” ,程序中的对象也应该具有 “模板”。
模板也称之为 类
什么是类?
汽车设计图纸规定了该款汽车所有的组成部分,包括外观形状、内部结构、发动机型号、安全,参数等具体的信息。这即为现实对象的模板。程序中的模板也有相同作用,称之为“类”。
按照设计图纸创造出来的汽车,才是真实存在、切实可用的实体,所以汽车实体被称为现实中的对象。而通过程序中的模板创造出来的实体,即为程序中的对象,称之为“对象”。
类的抽取
在一组相同或类似的对象中,抽取出共性的特征和行为,保留所关注的部分。
如:贵宾犬、牧羊犬、松狮、博美。
都有属性:毛色、体重、品种…
都有方法:吃、睡、跑
类的定义和创建
public class demos{
public static void main(String[] args) {
Cat c=new Cat("猫","杂牌","母鸡啊",99);
c.eat("狗粮");
c.sleep(99);
}
}
//类的定义,创建猫对象
class Cat{
//属性
String name;//猫的名字
String breed;//猫的品种
String sex;//猫的性别
int age;//猫的年龄
//对象的构造方法
public Cat(){
System.out.println("构造方法");
}
public Cat(String name,String breed,String sex,int age){
System.out.println("猫的名字为"+name+",品种为"+breed+",性别为"+sex+",年龄为"+age);
}
//方法
public void sleep(int hours){
System.out.println("猫睡了"+hours+"个小时");
}
public void eat(String feed){
System.out.println("猫吃了"+feed);
}
public void eat(){
System.out.println("定义猫的吃方法");
}
public void sleep(){
System.out.println("定义猫的睡觉方法");
}
}
类与对象的关系
类:定义了对象应具有的特征和行为,类是对象的模板
对象:拥有多个特征和行为的实体,对象是类的实例
什么是局部变量?什么是成员变量?
局部变量:
定义位置:方法或方法内的结构当中。
默认值:无默认值。
使用范围:从定义行到包含其结构结束。
命名冲突:不允许重名。
成员变量又称实例变量:
定义位置:类的内部,方法的外部。
默认值:字面值(与数组相同)
使用范围:本类有效。
命名冲突:可与局部变量重名,局部变量优先
方法的创建
public class demos{
public static void main(String[] args) {
Student s1=new Student();
s1.name="张三";
s1.play();
s1.play(5);
}
}
class Student{
String name;
/*
方法的创建,跟函数的创建一样
修饰符 返回值类型 方法名(形参列表){
方法体
}
*/
public void play(){ // 实例方法
System.out.println(name+"正在玩");
}
public void play(int hours){
// 实例方法带参数
System.out.println(name+"玩了"+hours+"小时");
}
}
方法的重载
public class demos{
public static void main(String[] args) {
Student s1=new Student();
s1.name="张三";
s1.play("绝地求生");
s1.play(5);
}
}
class Student{
String name;
/*
方法的重载
有些情况下,对象的同一种行为可能存在多种实现过程
一个类中定义多个相同名称的方法
要求:方法名称相同,参数列表不同(个数,类型,顺序)
与访问修饰符、返回值类型 无关
好处:方便、灵活
*/
public void play(String s){
//参数比如为 游戏名
System.out.println(name+"正在玩"+s);
}
public void play(int hours){
//参数比如为 玩了多长时间的游戏
System.out.println(name+"玩了"+hours+"小时");
}
}
对象的创建方法
public class demos{
public static void main(String[] args) {
System.out.println("对象的创建方式1");
Student s1=new Student("张三",22,99.9);
Student s2=new Student("隔壁老王",55,0);
Student s3=new Student("小明",16,100);
System.out.println("对象的创建方式2");
Student[] s=new Student[3];
s[0]=new Student("张三1",22,99.9);
s[1]=new Student("隔壁老王1",55,0);
s[2]=new Student("小明1",16,100);
System.out.println("对象的创建方式3");
Student[] ss={
new Student("张三2",22,99.9),
new Student("隔壁老王2",55,0),
new Student("小明2",16,100)
};
}
}
class Student{
String name;
int age;
double score;
//构造方法:类中的特殊方法,主要用于创建对象
/*
注意:
1.构造方法没有返回值
2.构造方法的方法名必须与类名完全相同
3.创建对象时,触发构造方法的调用,不可通过句点手动调用
4.如果没有在类中显示定义构造方法,则编译器默认提供无参构造方法
*/
public Student(){
System.out.println("这是无参构造方法");
}
public Student(String name,int age,double score){
System.out.println("学生"+name+",年龄"+age+",成绩为"+score);
}
}
this关键字的使用
public class demos{
public static void main(String[] args) {
Student[] s={
new Student("张三",22,"男",99.9),
new Student("小明",16,"女",100),
new Student("隔壁老王",50,"男",0)
};
s[0].eat("辣条");
s[1].eat("底料");
s[2].eat("空盘子");
}
}
class Student{
String name;
int age;
String sex;
double score;
public Student() {}
public Student(String name,int age, String sex, double score) {
this.name=name;//this代表当前实例,指向该对象
System.out.println("学生"+name+",年龄"+age+",性别"+sex+",分数"+score);
}
public void eat(String feed){
System.out.println(this.name+"请老师吃"+feed);
}
}



发表回复