面向对象OOP学习笔记

面向对象OOP

Object Oriented Programming

​ 高内聚低耦合,是软件工程中的概念,是判断软件设计好坏的标准,主要用于程序的面向对象的设计,主要看类的内聚性是否高,耦合度是否低。

面向对象的特点:

1.封装性:

​ API:应用程序编程接口

​ 封装性所需要实现的最基本的目标是实现“高内聚、低耦合”的“最佳状态”

​ 设计良好的模块会隐藏所有的实现细节,把它的 API 与它的实现清晰地隔离开来。模块之间只通过它们的 API 进行通信,一个模块不需要知道其他模块的内部工作情况,这个概念被称为信息隐藏或封装。因此访问权限应当尽可能地使每个类或者成员不被外界访问。

2.继承性:

​ Java语言规范中,java编译器会根据一个方法的 名字 参数的数目和类型 检查方法的重载 不包含返回类型 参数名 抛出异常

​ 在理想的情况下,一个具体的Java类应当只实现Java接口和抽象Java类中声明的方法,而不应当给多余方法。

构造器:

​ 父类的构造器不可被子类继承

​ 一旦显式定义了构造器,则系统不再提供默认构造器。定义显示构造器方法如下

​ 构造器一般写在属性和方法之间,与类名相同

class AAA{
    int aa;
    String bb;
    //构造器
    public AAA(){
        System.out.println("这里可进行赋值操作,或是输出语句之类,当构造器在被调用时,即新建对象就会执行");
    }
    public AAA( int aa,String bb){
        this.aa=aa;
        this.bb=bb;
    }
}
class test{
    public static void main(String[] args) {
    AAA p=new AAA(1,"阿萨德");  //  AAA() 即为调用构造器  这时会执行 上面写的构造器 
    }
}
//构造器和类名相同 
//无返回 void也无 不能有return
//不能被static、final、abstract、native、synchronized修饰
//一旦显式定义了构造器,则系统不再提供默认构造器

​ 如果子类的方法重写了父类的方法,那么子类中该方法的访问级别不允许低于父类的访问级别。这是为了确保可以使用父类实例的地方都可以使用子类实例,也就是确保满足里氏替换原则。

抽象类:

抽象类和抽象方法使用abstract关键字声明。一个类包含抽象方法,那么这个类必须为抽象类。抽象类中可以有普通类。继承时必须实现抽象方法

接口:

​ 接口的方法只能是抽象的和公开的

​ 接口支持多继承

​ 接口不能有构造器

​ 可以看作是一个纯抽象类。不能有任何实现方法,但是java8之后可以有默认实现方法 用default 加方法以及实现

default a(){
    System.out.println("");
} //接口中的方法实现
3.多态性:
方法重写:

override

发生在子类与父类之间

非静态方法属于类的实例,是可以被子类重写,从而达到多态的效果;静态方法属于类,是不能被重写,故而也不能实现多态。

当一个子类继承一个父类时,它同时继承了父类的属性和方法。子类可以直接使用父类的属性和方法,如果父类的方法不能满足子类的需求,则可以在子类中对父类的方法进行重写(或覆盖)。

方法重写返回值形参 都不能改变

public class test01 {
    public static void main(String[] args) {
        bb x=new bb();
        x.a();
        x.print("阿萨德"); // 这是重写后的print
    }
/*   输出结果
这是父类1	bb
1bb
这是父类1	bb
这是子类
*/
 }
 class aa{
    int a=1;
    String b="bb";
    public int print(String c){    //返回值 int  形参 String
        System.out.println("这是父类"+a+"\t"+b);
        return 1;
    }
 }
 class bb extends aa{

    public void a(){
        super.print("阿萨德");     //用的是父类中的print 没有被子类中的方法重写影响   super关键字调用父类方法
        System.out.println(a+b);
    }
    public int print(String b){		//返回值 int  形参 String
        super.print("阿萨德");			//用的是父类中的print 没有被子类中的方法重写影响
        System.out.println("这是子类");
        return 0;
    }
 }
方法重载:

overload

方法重载发生在同一个类中,他们的方法名一样,返回值类型和修饰符 可以一样也可以不一样

但是参数列表必须不一样

具体表现为:

​ 参数个数不同

​ 参数列表内容不同

​ 参数列表顺序不同 如下图中方法1和方法4

public class test01 {

    public static void main(String[] args) {
        chongZai c=new chongZai();
        c.fun();
    }


 }
 class chongZai{
    public String fun(String index1,int index2,double index3){
        System.out.println(index1+"\t"+index2+"\t"+index3);

        return "方法1";
    }
    public String fun(){
        return"方法2";
    }

    public int fun(int index1){
        System.out.println("方法3");
        return 1;
    }
    public String fun(int index1,String index2,double index3){
        return "方法4";
    }
 }
方法重写于方法重载的区别:

方法的重载和重写都是实现多态的方式。

重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;

重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值