javase第十四天:面向对象总结(属性,方法,构造器,代码块,内部类)

一、面向对象的第一条主线:类的内部成员

public abstract class Person{}

修饰类的关键字

四种权限修饰符的两种:缺省、pulbic

因为类在包下此时只有两个作用域,包内和项目内

private修饰类无任何意义

protected修饰类本质是为了保证子类的访问,此时也无任何意义

abstract、final

static修饰类无意义,static是指类加载时的静态属性或方法或代码块

abstract修饰类即类应当为抽象类,不能有具体的实例。

final即表明类应该是最后一代,不能有基础性。

1.属性

public static final int(String[] args)

1.1修饰属性的关键字

①四种权限修饰符:全都可用(保证封装性)

public即项目内,protected即不同包下的子类,缺省即同包内,private即类内

②static、final

static修饰属性表明该属性为静态属性,即属性在类加载时即可加载,且所有类的对象公用一个static

abstract修饰属性没有意义,继承类无需重写属性,属性继承类中重新定义即可

final修饰属性表明该属性在初始化后不可修改

static final 表明全局常量

③this、super

this表明本类的对象调用该属性

super表明父类的对象调用该属性

Person.this.属性表明外部类调用该属性,this.表明内部类调用该属性

1.2属性变量和局部变量的异同

①成员变量定义在类中,而局部变量可以是形参,方法内,构造器内。
②成员变量定义时可以有权限,而局部变量不可以有权限
③成员变量有默认值,而局部变量没有默认值

即成员变量是放在堆中的,而局部变量是放在栈中的

④共同点:成员变量和局部变量都需要先定义再赋值,都有其作用域。

1.3属性的赋值过程

①默认赋值

int num;成员变量有其初始值 0

②显式赋值------代码块赋值

两者顺序看代码先后,显式赋值在前即先显式赋值

③构造器赋值
④对象.属性或者对象.方法赋值

2.方法

public static/final/abstract void main()

2.1方法的修饰符

①四种权限修饰符(全都可用,保证封装线)
②static、final、abstract

static方法即是在类加载而加载,可以通过类.方法和对象.方法来调用

final方法即是方法不可被重写

abstract方法即是抽象方法,该方法的类一定是抽象类,且后面继承的子类必须重写该方法,否则该子类也是抽象类

③this、super

this表明该对象的方法

super表明父类的方法

Person.this.方法表明外部类的该方法,this.表明内部类调用该方法

2.2方法的重载和参数的值传递机制

①方法的重载格式

重名 + 参数个数或者形参类型不同 构成重载

②方法重载的规定

注意String… strs的写法与String[] strs的参数传递是一样的,即如果两个函数的参数是上述这两个,构不成重载,第一个可以和第二个一样通过strs[1]来访问数组

String… strs出现之后必须声明在末尾,如若出现String a, string… strs则可以判断第一个给a,后面的全给strs,如果出现在开始,则不知道a是没写还是声明。即形参中只能出现一个可变个数形参

重载是静态绑定,即在编译时就已经确定对象调用的是哪一个方法

③值传递机制

参数是基本数据类型,此时实参给形参的是真实的数据值。

参数是引用数据类型,此时实参给形参的是存储的地址值。

2.3方法的重写

①方法重写格式

名字 参数列表都相同即构成重写

②方法重写的规定

权限修饰符 static/abstract/final 数据类型 名字(参数)

权限修饰符:子类的权限修饰符不能小于父类的权限修饰符。
其中父类为private,子类无法重写方法,因为子类看不到父类的private方法。子类的权限修饰符若小于父类权限修饰符,即子类的方法只可在包内使用,而父类可在工程内使用,产生歧义。

static修饰符:只有非static的方法才有重写
static方法在类加载时已经固定,实现了静态绑定,无法再动态绑定。
abstract和final:abstract必须重写,final无法重写(无子类继承或者定义无法重写)

数据类型:返回值数据类型为基本数据类型或void则保持数据类型即可,若为类的类型,则可以返回类或者类的子类。
即返回类或者类的子类表明为多态。(向上转换)

名字参数必须都相同。

3.构造器

3.1修饰构造器的关键字

①四种权限类型
② static/abstract/final以及返回值修饰构造器无意义
③this,super

this,super本身即代表了本类的构造器以及父类的构造器。

3.2默认构造器,构造器,父类构造器

①默认构造器

默认构造器系统提供,若自己写了构造器,则系统不再提供默认构造器

②构造器的执行顺序

无显式定义构造器,系统会提供默认构造器,且在默认构造器中自动调用super()即父类的构造器

若子类显式的调用父类构造器,必须this和super二选一且放在首行。即子类若用this最终会调用super构造器

this构造器现在本类中寻找构造器,找到构造器后再向父类找构造器,再向父类的父类找构造器。即若有n个构造器,可能有n-1个this构造器,但一定有一个会调用super构造器

注意:在父类中显示声明一个有形参的构造器,则在子类中默认构造器报错,无super(),若在子类中显式的定义构造器,则需显式的提供super(args)的构造器

4.代码块

4.1修饰代码块的关键字

①权限修饰符(都不可用)

无需用权限修饰符,因为该代码时随着类创建结构到堆中时自动执行的,即与类的权限相同

②static

static修饰代码块即表明代码块执行的时间,静态代码块,则类加载时执行一次,只能调用静态方法或者静态属性。若为非静态代码块,则对象的加载到堆中执行一次,可以调用静态结构或者非静态结构

final和abstract都可以修饰类,即代码块跟着类走即可。

4.2 内存解析代码块顺序(见后面总结)

①类的执行顺序

默认,显式=代码块,构造器,对象.属性

②代码块父子的执行顺序

由父及子,静态现行

5.内部类

5.1内部类的关键字

①四种权限修饰符(都可使用)

作为外部类的属性来说

②static、final、abstract

作为外部类的属性来说,可以用static表示静态结构,类加载而加载

作为类来说,可以是final和abstract即可以无子类继承和定义抽象类

③this、super

作为内部类中的方法,可以使用this.method代表内部类对象调用方法,作为外部类的成员,可以使用Person.this.method调用外部类的方法

5.2成员内部类和局部内部类

①成员内部类分为静态和非静态
②局部内部类分为方法内,构造器内,代码块内

5.3需要关注的三个问题

①如何实例化内部类

class Person{class dog{} static class cat{}}
静态猫:Person.cat() 非静态狗 P.new dog()

②如何区分成员内部类和外部类的属性

name 内部类方法的形参
this.name 内部类的属性
Person.this.name 外部类的属性

③内部类的使用

内部类只在外部类中使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值