day7day8day9

===构造方法的作用:创建对象,给对象中的成员进行初始化
===构造方法的特点:
 1》方法名与类名相同
 2》没有返回值类型,没有void
 3》没有具体的返回值
===构造方法的的注意事项:
 1.如果没有给出构造方法,系统将自动提供一个无参构造
 2.如果给出构造方法,系统不在提供默认无参构造
 3.如果给出构造方法后还想使用无参构造现需要自己给出,所以我们最好永远自己给 出无参构造
===构造代码块
 在类中方法外出现;多个构造方法方法中相同的代码存放到一起,
 每次调用构造都执行,并且在构造方法前执行
===静态代码块
 在类中方法外出现,并加上static修饰;
 用于给类进行初始化,在加载的时候就执行,并且只执行一次
=== 静态变量和成员变量的区别
 静态变量属于类,所以也称为类变量
 成员变量属于对象,所以也称为实例变量(对象变量)
 1.加载时机的不同,静态变量,随着类的加载而加载
 成员变量随着对象的创建而存在
 2.所属不同:静态变量属于这个类(类变量),成员变量属于对象
 3.存储位置的不同:静态变量存在方法区的共享区,成员变量存在堆内存
 4.消失的时机的不同:静态变量随着类的消失而消失,成员变量随着对象的消失而消失
 5.使用方式的不同:成员变量,通过对象去调用,静态变量 通过类名去调用。
===以student 为例描述new的过程
 Student s = new Student();
     步骤:
  (1):加载Student.class文件进内存
  (2):在栈内存为s开辟空间
  (3):在堆内存为学生对象开辟空间
  (4):对学生对象的成员变量进行默认初始化
  (5):对学生对象的成员变量进行显示初始化
  (6):通过构造方法对学生对象的成员变量赋值
  (7):学生对象初始化完毕,把对象地址赋值给s变量
===一个标准的类:构造方法 成员变量 成员方法
=== static 状态修饰符号 静态的意思
   1.随着类的加载而加载
   2.优先于对象存在
   3.被类的所有对象所共享
   4.可以修饰成员变量,也可以修饰成员方法
   5.被static 修饰的东西我们可以通过类名.静态成员
   6.被static修饰的成员变量,我们叫类变量 属于这个类
   7.静态的只能访问静态的,非静态的既能访问非静态的,也能访问静态的
  (静态是随着类的加载而加载,this是随着对象的创建而存在,静态比对象先存在。)
   被静态修饰的成员,可以通过对象名去调用用,但是不推荐
===Math 一个数学工具类,此类中的成员变量和成员方法都是静态的,所以类名直接调用
  查JDK文档来了解 Math数学工具类
===代码块:把一对{}大括号 括起来的内容,我们称之为代码块
 ===代码块根据定义位置的不同分为:1.局部代码块 2. 构造代码块 3.静态代码块
  1.局部代码块:定义在方法中的代码块
  2.构造代码块:定义在一个类的成员位置
  3.静态代码块:定义一个类中的成员位置 但被static所修饰
===代码块执行顺序
  静态代码块先执行:随着类的加载而加载,只执行一次
  构造代码块,优先于构造方法先执行 构造代码块和构造方法是每new一次就会执行一次
===Java中的继承:当多个类中有一些共同属性,
  那我们可以将这多个类中的共同属性,抽取到一个父类当中,那这个多个子类就无需再定义这些共同的属性
   继承体现的思想:将共同属性向上抽取
   继承正着想:就是父类非私有的成员,子类是可以继承下来的
   继承的好处:1.提高了代码的复用性 2.提高了代码的维护性 3.让类给类之间产生了关系
   继承的弊端:增加了耦合性
===软件开发的原则:低耦合(类跟类之间的关系),高内聚(独立完成某写功能)
===继承的注意事项:1.Java中只支持单继承,一个子类只能有一个父类,但是支持多层继承
     2.子类只能继承父类 非私有的成员
     3.构造方法不能继承
     4.Object类 是所有的类的顶层父类,所有类都是直接或间接继承自他
===子类中的成员变量和父类中的成员变量名称一样,在子类中访问一个变量的查找顺序("就近原则")
   a: 在子类的方法的局部范围找,有就使用
   b: 在子类的成员范围找,有就使用
   c: 在父类的成员范围找,有就使用
   d:如果还找不到,就报错
===super 父类空间的一个标识,你可以理解为父类的一个引用 同过super 来访问父类的成员
   this 代表该类的一个引用,谁调用我,我就代表谁
   super.成员变量名 this.成员变量名
   super.成员方法名() this.成员方法名();
   super();调用父类无参数构造 this();调用本类构造
  有了继承关系以后,我们在创建对象时 ,会先执行父类构造方法,在执行子类的构造方法。
  因为子类要继承父类的一些数据,那么肯定先要把父类初始化完成了,子类才能初始化
  在一个类的每个构造方法里面的第一行默认都会有一个super()
===在子类所有的构造方法中默认都会有super()去调用父类无参数的构造
  但是如果父类没有无参构造怎么办?
   1.给父类写一个无参数构造
   2. 调用本类有参数构造,例如this("aaa");
===protected一个受保护的方法
===当子类中出现了和父类一模一样的方法(方法名一样,参数列表一样,返回值类型一样) 就会发生方法覆盖,也叫方法重写
 子类对父类某个功能不满意,想要去丰富这个功能,就可以选择重写
  1.父类私有的方法子类不能重写,因为父类私有的方法子不能继承,也就谈不上重写
  2.子类重写父类的方法时权限修饰符,不能比父类的低,最好一致    
 权限修饰符号的级别大小 public>protected>缺省>private
 @Override // 注解 表示方法重写
===final
 final 可以修饰 方法 可以修饰变量,可以修饰类
 final 修饰方法,此方法不能被重写,但是可以被继承
 final 修饰变量 此变量变为一个常量,不能重新被赋值
 final 修饰类 此类不能被继承
 final 修饰一个基本数据类型 修饰后指的是 值不能再被改变
 final 修饰引用数据类型 指的是这个引用不能再被重新赋值
 如果父类不想让子类重写某个方法,父类给可以给这个功能加个 final ,子类就不能重写
 final int NUM = 100;// 自定意一个常量,常量一般大写
 public static final int A = 600;// 公共的自定义的静态常量
 公共的 静态   最终的
===有参构造的意义
 为了给成员变量方便的赋值
===多态
 某一个事物,在不同时刻表现出不同的状态
   多态前提
 1.要有继承关系
 2.要有方法重写,没有也可以,但是没有的话多态就没有意义
 3.多态的写法:父类的引用指向子类对象
1.采用多态的方式去调用方法
  编译看左边 运行看右边

2.采用多态的形式去调用成员变量
  编译看左边,运行看左边

 多态的弊端: 父类引用不能访问子类独有的东西,如果你想访问,那我就需要向下转型
===抽象类
我们在父类中,没有必要给出一个具体的子类功能,因为每个子类功能都是存在差异的
所以我们在父类中把子类共同的功能抽象出来,让子类各自去实现他们的功能
===抽象类的语法:abstract 抽象 可以修饰类,也可以修饰方法
  1.一个抽象类里面可以没有抽象方法, 但是一个类里面有了抽象方法 那这个类必须定义为抽象类
  2.一个抽象类里面,可以有抽象方法,也可以有非抽象方法
  3.抽象里面的抽象方法,其所有子类必须全部重写,就带有强制性了
  4.抽象类,不能直接创建对象,我们只能通过间接的方式  多态 通过子类去初始化父类
  5.抽象类中有构造方法 为了我们在创建子类时 可以初始化父类
===抽象类不能直接实例化即new他自己的对象
 ==抽象类中的成员特点
  成员变量:抽象类中 可以定义成员变量,可以定义成员常量
 ==抽象类中可以有构造方法
 ==抽象类中可以有抽象方法,也可以有非抽象方法
   非抽象方法 可以让子类继承下去 
 ==抽象方法 强制让子类做的事情
===抽象类的特点
  a:抽象类和抽象方法必须用abstract关键字修饰
   抽象类格式:  abstract class 类名 {}
   抽象方法格式: public abstract void eat();
  b:抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
  c:抽象类中可以有构造方法,抽象类不能进行实例化,用于子类访问父类数据时的初始化
  d:抽象类不能直接实例化那么,按照多态的方式,由具体的子类实例化。
其实这也是多态的一种,抽象类多态。
  e:抽象类的子类
   要么是抽象类
   要么重写抽象类中的所有抽象方法

===abstract不能和哪些关键字共存?
 不能和private共存:冲突 private修饰的方法子类不能继承,那根本也就重写不了,abstract 又要强制去重写
 不能和 final共存 冲突 final 修饰的方法可以继承但是不能重写,abstract 又要强制去重写
 不能和static共存 因为静态方法没有重写这一说 abstract 又要强制去重写 没有意义
 







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值