---------android培训、java培训、期待与您交流! ---------
几个概念:
类:对象的集合体,对象模板。举例说明:现实中的汽车是一个类,它具有车的共同属性和行为:如动力驱动,有四个或四个以上轮子,加油等。小汽车、面包车、卡车等都是它的子类,它们都具有汽车(其父类)的属性和行为(注意:子类也是类,它可能还有子类),这就是继承。Java只支持单继承,即一个类只能有一个父类。对象是类的具体化:一个类可以有多个对象。一个类可以有多个子类,每个子类不尽相同。所谓:“一母生九子,九子各不同”。如小汽车可以是四轮驱动也可以是两轮驱动等;桑塔纳3000有红的、白的、黑的等多种颜色(这个就是类的多态性)。我们可以使用桑塔纳3000,但并不知道它是怎么造出来的,这种对用户隐藏实现细节就是封装。类的封装、继承和多态性是面向对象编程的三个核心特征。
包:是管理类的有效机制,实际上对应一系列文件夹,管理类和平常管理文件类似。
类名要求:1、不能使用关键字;2、第一个字符不能为数字;3、首字母应该大写,同包内不能重复;4、类名应该有意义。我先面的例子为了好理解,所以没有遵守第4条。
对于修饰符问题,是阻挡在Java初学者面前的一块顽石。不管是类的还是方法或变量的,我们总是记了忘忘了记。不掌握修饰符的用法,根本就没法进行下一步的学习,所以今天又总结了一些小东西,和大家共享,希望能给初学者帮助为盼。
在以后学习中我会不断总结Java的学习内容,用以帮助学习和自勉。下面的代码复制粘贴后就可以使用,在Eclipse中没有错误。
//注意:下面类A在a包中
package a;
/*类修饰符:
* public:公共类。同包不同包的类都能访问;
* default:默认类。只能被同一包的其他类访问,默认方式不加修饰符;
* final:最终类。该类不能被继承,即该类不能有子类;
* abstract:抽象类。该类不能被实例化。
*/
/*方法和变量权限修饰符,建立在其类能访问的基础上,这点很重要
* public:公共,在哪都能访问
* protected:包私有级,不同包子类可以访问
* default:友好方法,什么都不加,包私有级,不同包子类不可以访问
* private:类私有级,只有所属类能访问
* final:最终方法,不能由子类改变
* abstract:抽象方法,无方法体
* static:类方法修饰符,类方法只能调用类方法;但它不是访问权限修饰符
* 类方法以外的方法称实例方法:实例方法可以调用其他实例方法和类方法
* 记忆方法:有static类方法的只能调用static或被别的方法调用
*/
public class A {
// 常用变量的修饰符有:public protected private static final
// 实例变量,有private只能在同一个类中使用
// 如果一个对象改变了实例变量的值,不会影响其他变量的访问
// 不同对象的实例变量将被分配不同的内存空间
// 下面以一家人举例:
public String surname;// 如姓:张为public可以被任何地方访问
/*
* protected变量同包能用,不同包不能访问,但不同包子类可以访问 举例:带家里的存折,家里人能用。儿子长大成家了,有条件可以用。
*/
protected String depositbook;
String id;
/*
* private变量同包能用,不同包不能访问,但不同包子类也不可以访问 举例:家里的存折,家里人能用。姑娘出嫁了,家里存折不让用。
*/
private String colorType;
private int size;
float a, b;// 实例变量,对下面的方法都可见
private static String depart;
/*
* 类变量,有static,其值为该类所有对象共享,不会因类的对象不同而不同 当类变量被加载到内存时,类变量就会分配相应的内存空间
* 所有实例对象都共用一个类变量,内存中只有一处空间存放变量的值 如果一个对象改变了类变量的值,其他对象得到的就是改变后的值
* 通过实例化变量,让其可以被访问
*/
public static String getDepart() {
return depart;
}
public float getA() {
return a;
}
public static void setDepart(String depart) {
A.depart = depart;
}
public void setA(float a) {
this.a = a;
}
// 常量,最终成员变量,其值不变,即常量
public final float PI = 3.14f;
// 实例方法
void sum(float x, float y) {
setA(PI);
a = max(x, y);
b = min(x, y);
}
static float getMaxSqrt(float x, float y) {
float a, b, c;// 局部变量,仅在此方法中可见
// 如果max方法中没有static下面这句话会显示错误,因为类方法不能调用实例方法
a = max(x, y);
// 下面这句没错,类方法能调用类方法
b = min(x, y);
c = a * b;
return c;
}
// 缺省或友好方法,注意static不是权限修饰符
static float min(float x, float y) {
return x <= y ? x : y;
}
// 私有方法
private static float max(float x, float y) {
return x <= y ? y : x;
}
// 公共方法
public void testPublic() {
System.out.println("This is a Publictest!");
}
// 受保护方法
protected void testProtected() {
System.out.println("This is a Protectedtest!");
}
// 最终方法,不能被子类改变
protected final boolean isLeapyer(int year) {
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
return true;
}
return false;
}
}
//注意:下面类B在b包中
package b;
import a.A;
public class B {
protected B(){
A test = new A();
//import a.A后可以直接调用a.A的public变量和方法
test.testPublic();
test.getA();
test.setDepart("三毛");
}
}
//注意:下面类C在B包中
package b;
import a.A;
class C extends A{
void testC(){
// C为A的子类可以调用父类A的public和protected变量和方法
testPublic();
testProtected();
isLeapyer(2000);
}
}
---------android培训、java培训、期待与您交流! ---------