标签:java
IT十八掌第五天总结
class
成员变量,属性
成员函数,方法.
构造函数
-------------
和类同名。
没有返回值。
javabean的规范
------------------
私有的属性,
公有的getter/setter.
代码块
----------------
1.局部代码块
在函数内部定义{},
不能使用static修饰。
2.构造代码块
也是类的成员,和成员变量和成员函数同级。
构造对象时,先调用构造代码块,然后是构造函数。
3.静态代码块
构造代码块 + static修饰符。
静态代码块在类加载的时候执行,而且只执行一次。
手动控制类加载使用Class.forName("classname"),默认加载类时,执行代码块。
Class.forName(String,boolean initialize,ClassLoader)可以控制加载时是否初始化。
继承
多个类中存在相同的属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性
和行为,只要继承那个类即可。
多个类可以称为子类,单独的类可以称为父类或者超类。
子类可以直接访问父类中的非私有的属性和行为。
通过extend关键字让类和类之间产生继承关系。
class SubDemo extends Demo {}
让B类继承A类
class B extend A { …… }
继承的出现提高了代码的重用性,。
继承的出现让类和类之间产生了关系,提供了多态的前提。
继承的特点
java 只支持单继承,不支持多继承
一个类只只能有一个父类,不可以有多个父类。
class A {}
class AA {}
class B exdents A {}
class c exdents A ,AA //error
java支持多层继承
class A {}
class B exdents A {}
class C exdents B {}
Super
super和this的用法相像
this代表本类对象的引用
super代表父类的内存空间的标识。
当子父类出现同名成员时,可以用super进行区分
子类要调用父类构造函数时,可以使用super语句。
在本类当中
super(); 调用父类的构造函数
super. 调用父类的方法
this. 调用本类的其他方法
this()调用本类的其他构造函数
this() super() 构造函数必须是第一行
this . super. 可以在任意位置调用
子类中所有的构造函数默认都会访问父类中空参数的构造函数
当父类中没有空参数的构造函数时,子类的构造函数必须通过this或者super
语句指定要访问的构造函数。
子类重写的权限要大于父类的方法权限(权限可放大,不能缩小(不能私有化))。
final
---------------
修饰类,表示 类不能被继承
修饰方法 表示方法不能被修改
私有方法可以使用final 可以编译 但是无意义
final修饰的变量是一个常量。只能被赋值一次。 (如果未赋值,编译无法通过)
abstract 抽象的
-------------
1. 没有方法体的方法, 必须使用abstract 修饰
2.抽象方法只能存在于抽象类中
3.抽象类也必须使用abstract 修饰。
4. 抽象类不一定要有抽象方法
5.abstract+static 是非法的修饰符组合
final+abstracr 非法的修饰符组合
private +abstract 是非法的修饰符组合
6.面向接口的编程,降低耦合度(便于维护)增强可扩展性
抽象方法只有方法声明,没有方法体,第一在抽象类中
格式: 修饰符 abstract 范围值类型 函数名(c参数列表);
抽象类不可以被实例化,不能被 new 创建对象
抽象类是具体事物抽取出来的,本身是不具体的,无对应的实例。
抽象类即使创建了对象,调用抽象方法也没有意义。
抽象类通过子类来实例化。 该子类必须完全覆盖掉抽象类中的所有抽象方法才可以创建
接口 interface
--------------------
格式
interface {}
接口的成员修饰符是固定的
成员变量:public static final (常量)
成员函数:public abstract
发现接口中的成员都是public
接口和接口之间允许继承
接口允许多重继承
类和接口之间是实现关系
*.文字阐述静态代码块的作用。
A : 静态代码块在类加载的时候执行,而且只执行一次。
可以自定义静态代码段的执行
*.构造代码块与构造函数的调用顺序如何?和方法的声明位置是否有关?为什么?构造代码块的作用是什么?
A: 顺序为 构造代码块 --> 构造函数 ,和方法的声明位置无关。
也是类的成员,和成员变量和成员函数同级。主要是为了提高代码的重用性并对成员变量进行初始化。
*.类加载时,是否一定会执行静态代码块?如何手动控制类加载?
A:类加载是默认是会自动加载执行静态代码块的,
手动控制类加载使用Class.forName("classname"),默认加载类时,执行代码块。
*.定义类Person,Man,Woman形成继承关系。
A:
/**
* extends格式 : class B extends A {} B-->A
*/
class Person { //定义Person 类
}
class Man extends Person{ //让man 类继承Person
}
class Woman extends Person{
}
*.什么是抽象方法?什么是抽象类?抽象类是否有构造函数,是否可以重载?
A: 抽象方法是 必须使用abstract 来修饰的没有方法体必须有子类来具体实现的方法‘
包含抽象方法的类就是抽象类也必须使用abstract 来修饰。
抽象类一样有构造函数 同样可以被重载
*.抽象修饰符有哪些非法组合?并给出合理的解释?
A:abstract+static static修饰的是公共类的属性,抽象的直接访问没有意义。
final+abstracr final 是最终的不能被更改,而abstract 是需要子类来实例化,需要对它进行操作的。
private +abstract 私有化是不能被继承的,而abstract是需要子类来实例化的
*.super和this作用以及用法以及注意事项?
A:Super
super和this的用法相像
this代表本类对象的引用
super代表父类的内存空间的标识。
当子父类出现同名成员时,可以用super进行区分
子类要调用父类构造函数时,可以使用super语句。
在本类当中
super(); 调用父类的构造函数
super. 调用父类的方法
this. 调用本类的其他方法
this()调用本类的其他构造函数
this() super() 构造函数必须是第一行
this . super. 可以在任意位置调用
*.定义接口
1.IWhite
2.IRich
3.IBeanti
4.定义类,实现以上三个接口.(WomenStar)
5.定义土豪类(EarchRicher.marring(...))
/**
* interface 接口的格式是: interface {}
*/
//定义三个 白、富、美
interface IWhite{ //定义白
public void Whiteing ();
}
interface IRich{ //定义富
public void Riching ();
}
interface IBeautiful{ //定义美
public void Beautifuling ();
}
//定义一个接口继承白、富、美 三个接口
interface WomanStart extends IWhite,IRich,IBeautiful{
}
//定义土豪类
class EarchRicher{ //
public void marry(WomanStart MM){
System.out.println("FIND 白富美 !!");
}
}
class EarchRicherMan {
public static void main(String[] args){
WomanStart W = new WomanStart(){
public void Whiteing (){
}
public void Riching (){
}
public void Beautifuling (){
}
};
EarchRicher M =new EarchRicher();
M.marry(W);
}
}标签:java
原文地址:http://670597669.blog.51cto.com/10018785/1772392