类设计基础与进阶

知识点总结第三篇

 
1.封装就是将对象的属性(域/数据)和行为(通过方法实现)定义在一起,封装在一个类里面,而隐藏就是对封装的某些重要的属性和行为进行保护(通过加上修饰词进行保护eg:private、protected)
 
2.变量只在它所在的域中有效,比如局部变量只在它所定义的方法中有效,而成员变量在整个类中有效
 
3.方法的重载是在一个作用域内定义的多个同名方法但是参数列表不同,这样通过传入不同的数据就能对相应的数据做出相应的行为(并且在程序运行的时候会自动调用相应方法)
 
4.方法的重写一般是子类继承父类的方法后定义一个同名方法但是方法的行为和父类可能不同
 
5.this指针,表示的是当前的对象,当局部变量和和域名重名的时候,只能访问到局部变量,但是通过this.的操作就能访问到同名的域,这个对象只能在非静态成员方法中可见。
 
6.对象数组的声明(创建) 对象数组名 =new 类名 [数组长度];  ,对象数组的初始化 类名 对象数组名[]={对象列表(通过,隔开)};
 
7.私有成员(private)只能被所在的类中的方法访问,不能通过对象名或类名访问(eg:只能被该类自身所访问和修改)
 
8.公有成员(public)  1.可以被同一个类中或不同包中的子类继承 2.并且可以被子类中的方法直接访问 3.还可以在子类的类体外通过子类的对象名直接访问
 
9.保护成员(protected)  1.可以被所在类的其他方法直接访问 2.可以被子类中的方法直接访问 3.在同一个包中,在类体外可以通过对象名直接访问 4.不是同一包中的非子类不能通过对象名直接访问(eg:可以使用protected修饰符来防止方法和数据被不同包的非子类访问。)
 
10.默认成员(友好成员) 1.可以被类中其他方法直接访问 2.在这个类所在的包中可以通过对象名直接访问(类外)
 
11.package等同于文件系统的文件夹,package语句能将类放在相应的文件夹中,用包的方式可以对类进行分类管理和使用,且在需要的时候可以引入相应包中的类或类中的静态成员
 
12.在已有类的基础上生成新类的过程称为继承(也叫派生),已有的类称为父类,新类称为子类或派生类,通过继承我们能实现代码的重用,提高开发速率。
 
13.通过继承子类能直接使用继承自父类的方法,但是不能使用构造方法(子类不继承父类的构造方法),要使用父类的构造方法可以同构super.访问(因为子类继承父类的方法,那么子类的方法数>=父类)
 
14.super可以访问到子类隐藏父类的方法或者属性。
 
15.因为子类的构造方法会调用父类的构造方法(如果自己没有手动super系统会自动调用父类的无参构造方法),所以父类最好要么没有没有构造方法或者写一个自己的无参构造方法
 
16.object是所有类的直接或者间接父类,如果一个类没有继承其他类,那么这个类默认继承object类,换句话说,object是所有类的共同父类
 
17.instanceof用于判断某一个对象是否是某一个类的实例eg:

Person p = new (name);
    if(p instanceof Person) {//如果是这个类的实例,输出YES
        System.out.println("YES");
    }

 
18.final修饰的方法可以被子类继承但是不能被子类重写
 
19.多态性一定是在同一类对象之中表现出来的(对象的上、下转型不能体现出多态性,方法的重载、覆盖、重写能体现出多态性)
 
20.继承和组合的最大区别是:组合方式无法实现多态性,而继承方法可以实现多态性
 
21.当用父类对象表示子类对象的时候父类对象称为子类对象的而上转型对象,将父类对象强转为子类对象时,此时的父类对象称为下转型对象
 
22.上转向对象
    1.可以访问子类继承父类的域或被子类隐藏的域
    2.可以调用子类继承父类的方法或被子类重写的方法
    3.不能访问子类相对父类新增的方法或者域
总之就是上转型对象只能访问父类的域。
 
23.匿名类的好处
    1.内部类方法可以直接访问该类定义所在的作用域中的数据,包括私有的数据。
    2.内部类可以对同一个包中的其它类隐藏起来
    3.使用内部类定义回调函数,可以节省代码
24.抽象类中可以定义域和方法,但是不能生成抽象的实例,换句话说可以定义域或方法,但是不能实现方法,并且注意抽象方法不能用final修饰
eg:

abstract class Shape {
    public abstract double area();//抽象方法,并未实现area方法只是生命
    public abstract double perimeter();
}

25.在接口里面定义的域必须是常量,和抽象类相同的接口中的方法只能声明不能实现
 
26.JAVA的接口解决了JAVA没有多继承问题,一个类可以实现多个接口,一个接口也可以继承多个接口,接口的定义如下

interface 接口名 extends 父类接口列表 {//接口列表中的接口通过`,`分割
    //符号常量定义
    //方法声明!
}

27.在一个JAVA文件中,只能存在一个public接口或者一个public类并且接口名和文件名相同,接口中的成员变量全部默认abstract static修饰
 
28.接口的使用通过implements引用接口eg:

class 类名 implements 接口列表 {
    //类的内容
}

注意实现接口方法的时候要用public修饰
 
29.接口和抽象类的不同点:
    1.抽象类用于表示同一类对象的共同属性和行为,接口可以表示不同类的对象的属性和行为
    2.接口内定义的变量默认是公共静态的常量,而抽象类中的变量是普通变量
    3.接口中可以省略abstract修饰符,但是抽象类中的抽象方法必须用abstract修饰
 
30.子类虽然可以继承父类的所有成员,但继承的成员在子类中不一定都能被子类中的成员访问到
 
31.JAVA语言只支持单重继承,但是一个类可以实现多个接口
 
32.当调用子类的有参构造方法的时候,会先调用父类的无参构造函数

原文地址:https://www.cnblogs.com/Mangata/p/14170359.html