面向对象部分知识点小结

大目录总纲:
1.类和对象
2.this,static,final三个关键字
3.方法详解
4.封装
5.继承
6.多态
7.代码块
8.内部类

面向对象的三大特征:封装,继承和多态
1.类和对象
1.1类和对象的关联:类是一个共性的概念,而对象是指一个具体的、可以使用的事物。
首先产生类,而后才可以产生对象。对象的所有行为,一定在类中进行了完整的定义。
1.2类中的元素及其定义:
类:[修饰符] class 类名
构造函数:[修饰符] 构造函数名(形参列表)
方法:[修饰符] 方法返回值类型 方法名(形参列表)
成员变量:[修饰符] 类型 成员变量名 [=默认值];
1.3对象的产生和使用:
对象的产生:通过new关键字来调用某个类的构造函数来创建。

Person p = new Person();

对象的使用:访问对象的实例变量;调用对象的方法。
具体的语法为:类.类变量|方法,实例.实例变量|方法。

2.this,static,final三个关键字
2.1 this关键字:
this关键字最大的作用就是让类中一个方法,访问该类里的另一个方法或实例变量。
this调用本类属性:只要在类中方法访问类中属性,一定要加this关键字。
(this.a = a)
this调用本类方法:
this调用普通方法:在调用普通方法时,加上this可以区分方法的定义来源。
(this.方法名称(参数))
this调用构造方法:this调用构造方法的语句必须放在构造方法首行并且要留有出口。
(this(参数))
this表示当前对象的引用。
2.2 static关键字:
static类属性:访问static属性应使用类名称.属性名;
所有的非static属性必须在对象实例化后使用,而static属性不受对象实例化控制。
static类方法:所有的static方法不允许调用非static定义的属性或方法;
所有的非static方法允许访问static方法或属性。
2.3 final关键字:
a.使用final修饰类、方法、属性
b.final成员变量必须在声明的时候初始化或者在构造函数中初始化,否则就会报编译错误
c.使用final定义的类不能有子类
d.final一旦修饰一个类之后,该类的所有方法默认都会加上final修饰(不包含成员变量)
e.使用final定义的方法不能被子类所重写
f.使用final定义的变量就成了常量,常量必须在声明时赋值,并且不能被修改
g.使用final修饰的变量不能再次被赋值
h.定义常量,常量全用大写字母,多个单词间以_分隔

3.方法详解
3.1方法所属性:在面向对象编程语言里,类才是一等公民,整个系统由一个个的类组成。如果这个方法使用了static修饰,则这个方法属于这个类,否则这个方法属于这个类的实例。
3.2形参个数可变的方法:在定义方法时,在最后一个形参的类型后增加三点(…)。
形参可变的参数本质就是一个数组参数。
以下两种方法签名的效果完全一样

 public static void test(int a , String... books) {
        
    }
    public static void test2(int a , String[] books) {

    }

3.3递归方法:一个方法的方法体中再次调用了方法本身。
3.4方法重载:同一类中方法名相同,参数列表不同。
3.5方法重写:子类定义了与父类方法名称、参数类型及个数完全相同的方法。
但是被重写不能够拥有比父类更为严格的访问控制权限。

4.封装
a.封装是指将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。
b.4个访问控制符:private(当前类访问权限), (default)(包访问权限),
protected(子类访问权限),public(公共访问权限)
c. setter方法:主要用于进行属性内容的设置和修改
getter方法:主要用于属性内容的取得

5.继承
a.Java的继承通过extends关键字来实现,实现继承的类被称为子类(派生类),
被继承的类被称为父类(基类、超类)。
修饰符 class SubClass extends SuperClass
b.一个子类只能继承一个父类,Java不允许多重继承,但是允许多层继承。
c. super限定:super用于限定该构造器初始化的是该对象从父类继承得到的实例变量,
而不是该类自己定义的实例变量,并且super调用父类构造器也必须出现在子类构造器执行体的第一行。
c.1:super() (调用父类构造器)
c.2:super.data (访问父类属性)
c.3:super.function() (调用父类的成员函数)

6.多态
a.相同类型的变量、调用同一方法时呈现出不同的行为特征,这就是多态。
b.引用变量的强制类型转换:
b.1:基本类型之间的转换只能在数值之间,
引用类型之间的转换只能在具有继承关系的两个类型之间进行。
b.2:把子类对象赋给父类引用变量时,被称为向上转型,这种转型总是可行的。
把一个父类对象赋给子类对象引用变量时,就需要强制类型转换,
而且还可能在运行时产生异常。(向下转型前提是向上转型)
c. instanceof运算符:instanceof运算符的前一个操作数通常是一个引用变量,
后一个操作数通常是一个类,它用于判断前面的对象是否是后面的类,
或者是其子类、实现类的实例。

7.代码块:使用{}定义的一段代码。
7.1普通代码块:定义在方法中的代码块
7.2构造块:定义在类中的代码块(不加修饰符)
注:构造块优先于构造方法执行,每产生一个新的对象就调用一次构造块,
构造块可以进行简单的逻辑操作(在调用方法前)
7.3静态代码块:使用static定义的代码块
定义在非主类中的静态代码块优先于构造块执行;
定义在主类中的静态代码块优先于主方法(main)执行。

8.内部类:在这个定义在其他类内部的类
8.1成员内部类:
a.成员内部类中不能存在任何static的变量和方法
b.成员内部类是依附于外围类的,所以只有先创建了外围类才能够创建内部类
8.2静态内部类:static修饰的内部类
a.静态内部类的创建是不需要依赖于外围类,可以直接创建
b.静态内部类一般情况不可以使用任何外围类的非static成员变量和方法
8.3方法内部类:定义在外部类的方法中的内部类
a.方法内部类不允许使用访问权限修饰符
b.方法内部类对外完全隐藏,
除了创建这个类的方法可以访问它其它的地方是不允许访问的
c.方法内部类要想使用方法形参,该形参必须用final声明
8.4匿名内部类:一个没有名字的方法内部类
a.匿名内部类是没有访问权限的
b.匿名内部类必须继承一个抽象类或者实现一个接口
c.匿名内部类中不能存在任何静态成员或方法
d.匿名内部类是没有构造方法的
e.匿名内部类也可以引用方法形参,此形参也必须声明为final
8.5使用内部类:
a.在外部类内部使用内部类:通过内部类类名来定义变量,
通过new调用内部类构造器来创建实例。(注意静态成员不能访问非静态成员)
b.在外部类以外使用非静态内部类:

class Out {
    class In {
        public In(String msg) {
            System.out.println(msg);
        }
    }
}
public class Illusion {
    public static void main(String[] args) {
        Out.In in = new Out().new In("测试信息");
    }
}

注:非静态内部类的构造器必须通过其外部对象来调用。
c.在外部类以外使用静态内部类:

class Out {
   static class In {
        public In(String msg) {
            System.out.println(msg);
        }
    }
}
public class Illusion {
    public static void main(String[] args) {
        Out.In in = new Out.In("测试信息");
    }
}

注:静态内部类只需要使用外部类即可调用构造器,
而非静态内部类必须使用外部类对象来调用构造器。

发布了49 篇原创文章 · 获赞 18 · 访问量 4376

猜你喜欢

转载自blog.csdn.net/asd0356/article/details/89076616