华清远见-重庆中心-JAVA面向对象阶段技术总结

华清远见-重庆中心-JAVA面向对象阶段技术总结

面向对象和面向过程的编程思想
面向对象(OOP)

通过创建(new)对象,赋予对象对应的行为和特征,让这些对象相互配合来解决问题

面向过程(POP)

分析解决问题所需要的步骤,通过函数依次实现这些步骤来解决问题

类和对象
类 Class

**具有相同属性和行为的对象的集合,称为"一类"。**可以理解为模板。

**属性:**描述对象的特征,在程序中,通过定义变量的形式表现属性。

**行为:**描述对象的动作,在程序中,通过定义方法的形式表现行为。

在程序中,通过定义一个class来定义一个类。在类中定义变量描述属性,定义方法描述行为。

定义类

[修饰符] class 类名{

//属性(变量)

//行为(方法)

}

public class Person {
    /*
    * 定义属性,如:
    * 姓名
    * 性别
    * 年龄
    * */
    String name;
    String sex;
    int age;

    /*
    * 定义方法,如:
    * 吃饭
    * 睡觉
    * 打豆豆
    * */
    public void eat(){
        System.out.println("吃饭");
    }

    public void sleep(){
        System.out.println("睡觉");
    }

    public void BeatBeans(){
        System.out.println("打豆豆");
    }
}
对象 Object

对象是类的一个实例

创建对象

类名 对象名 = new 构造方法([参数]);

public class Father {
    public static void main(String[] args) {
        //创建对象初始化
        Person person=new Person();
        //调用person对象中的属性并赋值
        person.name="张三";
        person.sex="男";
        person.age=20;
        
        //调用person对象中的方法
        person.eat();
        person.sleep();
        person.BeatBeans();
    }
}
方法
调用

一段独立的代码,**通过类名或方法使用操作符“.”进行调用。**可以被重复调用。

自定义方法
修饰符 返回值类型 方法名(参数类型 参数名,参数类型 参数名...){
方法体
}

**返回值类型:**可以是原始数据类型也可以是引用数据类型,还可以没有返回值,但要注明:void。返回值不为void时,方法结束前需要使用return返回对应的结果。

**参数类型和参数名:**参数类型可以是数据类型,也可以是类名;参数类型和参数名可以不写,此时参数列表无参数。

方法的分类
  • 无返回值无参数
  • 无返回值有参数
  • 有返回值无参数
  • 有返回值有参数
成员变量、局部变量、静态常量

**成员变量:定义在类中的变量,即类的属性。**它有默认值。通过对象访问。

**局部变量:定义在方法中的变量。**它没有默认值。只能在方法中赋值后才能使用。

静态常量:特殊的成员变量,用final static修饰。它有默认值。通过类名访问。

class Person{
//成员变量
String name;
//静态常量
final static String COUNTRY="中国";
//定义方法
void info(){
//局部变量
int age=30;
System.out.println("我叫"+name+",今年"+age+"岁,是一个"+COUNTRY+"人");
}
}
构造方法

是一种特殊的方法。方法名和类名一致。通常用于限制创建对象时携带的参数,并初始化成员变量。没有返回值。

public class Person{
    
    //定义一个构造方法,不定义也有一个默认的,不过隐藏了
    //访问修饰符 类名(){}
    public Person(){
        
    }
}

注意:

  1. 未在类中定义无参构造方法和有参构造方法时,**会默认有一个隐藏的无参构造方法。**定义了有参构造方法时,默认隐藏的无参构造方法就会消失,如果需要无参构造方法,需要重新定义一个。
  2. **执行构造方法不一定会创建对象。**比如抽象类有构造方法,但是在调用时无法创建抽象类对象,只能在创建抽象类的子类对象时,自动调用抽象类的构造方法。
  3. 构造方法不能重写。
public class Person {
    //定义有参构造方法
    public Person(int name){
        System.out.println(name);
    }
    
    //前面定义了有参构造方法,若还需要无参构造方法,则需要重新定义一个
    public Person(){
        
    }
}
面向对象三大特性——封装、继承、多态
封装

private对类或属性进行修饰,可以防止非当前类的访问。

封装的步骤
  1. 给类中的所有属性添加private访问修饰符
  2. 给每个属性添加get方法名()方法用于读取属性值
  3. 给每个属性添加set方法名()方法用于给属性赋值

生成getter and setter快捷键:alt+insert

继承
继承的分类
  1. 继承类:类A extends 类B,即B是A的父类。此时,类A可以访问父类所有的非私有成员。
  2. 继承接口:接口A extends 接口B。
  3. 实现接口类:类A implements 类B,即类A是接口B的实现类。

注意:

  1. Object类是所有类的父类。
  2. java是单继承,但是允许多重继承。
重写 Override

子类继承父类后,对父类的非私有方法进行重写,达到拓展或重做的目的。抽象父类的抽象方法必须重写,除非子类也定义为抽象类。

生成Override快捷键:ctrl+o

特点:

  • 必须满足方法名、返回值、参数列表都相同
  • 访问权限不能比父类中的方法更严格
  • 不能抛出比父类中的方法更大的异常
重载 Overload

在一个类中,同一个方法在不同参数下,表现出不同的行为,即同名不同参

生成Overload快捷键:ctrl+o

特点:

  • 被重载的方法必须改变参数列表(参数个数或类型或顺序不一样);
  • 被重载的方法可以改变返回类型;
  • 被重载的方法可以改变访问修饰符;
  • 被重载的方法可以声明新的或更广的检查异常;
  • 方法能够在同一个类中或者在一个子类中被重载。
  • 无法以返回值类型作为重载函数的区分标准。
this和super

都可以当做对象或构造方法使用。

**当作对象时:**this表示当前类的对象,super表示当前类的父类对象。this和super当作对象时只能用在非静态方法中。

**当做构造方法:**this()表示当前类的无参构造方法,如果带参数则表示对应参数的构造方法。super()表示当前类的父类的无参构造方法,如果带参数则表示对应参数的构造方法。

注意:

  • this()和super()只能用在另一个构造方法的首行。

  • 在继承关系中,如果父类和子类都没有写出来任何构造方法时,子类有一个隐藏的无参数构造方法,会自动调用父类中无参数的构造方法。

//创建父类Father
public class Father{

}
//创建子类
public class Son extends Father{
    /*
    这个构造方法是隐藏的
    */
    public Son(){
        super.();
    }
}
  • 如果父类中有有参构造方法,没有无参构造方法时,子类必须要调用父类中的构造方法。
class Father{
	String name;
	public Father(String name){
		this.name=name;
	}
}
class Son extends Father{
	public Son(){
		super("xxx");
	}
}

多态

子类的对象可以保存在父类的变量中。多态通常应用于定义方法时,形参为一个父类或接口类型变量,实参可以是子类对象。

public class Father{
	public void drink(){
	System.out.println("father drinking");
	}
}
public class Son extends Father{
	public void play(){
		System.out.println("son playing");
	}
	@Override
	public void drink(){
	System.out.println("son drinking");
	}
}
public class Main(){
	public static void main(String[] args){
		Father f = new Father();
		f.drink();//父类中的方法
		Son son = new Son();
		son.play();
		son.drink();//调用的是重写后的方法
		//多态
		Father father = new Son();
		//father.play();无法调用
		father.drink();//调用的是重写后的方法
	}
}
关键字
final

可以修饰类、方法、属性。

  • 修饰类:类为最终类,不能被继承。
  • 修饰方法:方法为最终方法,不能重写。
  • 修饰属性:属性变更为常量,不能改变数值。
abstract

可以修饰类和方法。

特点:

  • 修饰类时,类变为抽象类。
  • 修饰方法时,方法变为抽象方法,没有方法体。
  • 抽象类可以有构造函数,但该构造方法只会在new抽象类的子类对象时自动调用。
  • 抽象类中的方法不一定都是抽象方法,也可以是普通方法。
  • 非抽象类子类继承抽象类时,必须重写父类的所有抽象方法。
  • 有抽象方法的类必须用abstract关键词修饰成为抽象类。
interface

定义接口的关键字。代替class。

如果某个抽象类中全是抽象方法时,可以将该类定义为接口。

特点:

  • 接口是一个完全抽象类,其中的方法都是public abstract修饰的抽象方法,没有方法体,其中的属性都是public final static修饰的静态常量。
  • 接口中没有构造方法,不能创建对象。
  • 接口通过implements实现,实现它的类称为该接口的实现类。
  • 一个类可以同时实现多个接口(不同于类与类之间的单继承),实现多继承。
  • 一个类实现了接口后,必须重写其中的抽象方法。
  • JDK1.8后,**可以在接口中定义default方法和static方法,**该方法不用重写。
//类A是类B的子类,是接口C,D的实现类
public class A extends B implements CD{
    
}
static

可以修饰属性、方法或代码块。被修饰的内容称为静态成员。

注意:

  • 静态方法中无法使用非静态成员。
  • 普通方法中可以使用静态成员。
  • 静态成员可以直接通过类名访问,不用调用对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值