//写代码一定要保存,不然总是会报错,还查不出来,切记!当保存成为习惯就没有这个问题了 |
* 面向对象:三大特点(封装,继承,多态),。这只是面向对象的,java的特点有很多,可移植,健壮, |
* |
* |
* 在多个对象中抽象出来的叫类 |
* return 就是一个程序的结束,后面跟的逻辑都是无意义的,main是开始 |
* 但程序进入main之前会先找 static 然后把带有 static 的方法和变量放到静态池 静态池是在方法之前编译 |
* |
* 生物:动物 植物 细胞 对于动植物来说 生物就是类 类下面有三种对象 |
* |
* 对象是类的实例 是一类事物的具体体现 |
* |
* 在类中的位置不同 |
* 成员变量:类中,方法外 |
* 局部变量:方法中 |
* 作用范围不一样 |
* 成员变量:类中 |
* 局部变量:方法中 |
* 初始化值的不同 |
* 成员变量:有默认值 |
* 局部变量:没有默认值。必须先定义,赋值, |
* 生命周期不同 |
* 成员变量:随着对象的创建而存在,随着对象的消失而消失 |
* 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失 |
* |
* 属性:成员变量:事物的状态信息 |
* 方法: 成员方法:对应事物的行为 |
* |
* 类的使用 |
方法的命名:修饰符 + 返回值类型 +方法名(数据类型 ){ } |
类的命名: 修饰符 + +方法名 ( ) { } |
变量 : 修饰符 + 变量名 |
JavaBean是类的规范 :必须是具体的,公共的 具有无参构造();写了有参,若不写无参,默认无参就不在生效 |
java中构造方法指的是:与类名相同,无返回类型的方法,参数可以为空,也可以带参数。 |
比如一个 Point 类, private Point(){}这个就是无参数的构造方法。 |
private Dao( int x0, int y0){}这个就是带参数的构造方法。 |
作用:用来初始化 java 类,提供类的初始化和实例化,即可以通过 new 来创建对象以便调用。 |
如果想在实例化对象的时候就为这个属性赋值的话,可以通过有参构造实现。 |
public :对所有类可见 |
protected :对同一包中的类可见、对同一包及不同包中的子类可见 |
default :对同一包中的类可见、对同一包中的子类可见 |
private :仅对类本身可见 封装 修饰成员变量被 |
private 修饰后的成员变量和成员方法,只在本类中才能访问 |
可见是可访问的意思,即由这些修饰符修饰的成分(类、方法、成员变量)可以被其它类 |
访问。对子类可见即子类可以继承。 |
这里需要注意的是 protected 与 default ,二者的区别在于不同包中的子类是否可以继承。 |
封装的构造方法 |
修饰符 当前类名(参数列表){ |
// 方法体 |
} |
|
public class Animal(){ //创建一个类 |
private int num; //定义两个私有变量 |
private String name; |
public Animal(){ //构建无参 |
} |
public Animal( int num,String name){ //构建有参 |
this .num=num; |
this .name=nume |
} |
public int getNum( int num){ |
return num; |
} |
public void setNum(){ |
this .num=num; |
} |
public void cont(){ //创建方法 |
} |
|
} |
public class Cat (){ |
public static void main (String [] args){ |
} |
|
public String getName(){ |
//Animal类的句柄 miao是类的对象 new Animal() :Animal类的空间 |
Animal miao= new Animal(); //创建一个Animal对象 miao 需要用到无参构造 |
miao.setNum( " mao111" ); //私有后的赋值 不私有可直接调用 miao.num=45; |
|
//调用的三种形式:直接调用,赋值调用 输出调用 |
类中 : 方法名直接调用 |
赋值调用: int sum =getSum( 5 , 6 );使用有参构造 |
输出调用:syso( "有返回值得方法名()" ); |
重载:同一个类, 方法名相同 型参不同 |
重写:子类重写父类中的抽象方法,声明完全一样,增加方法体;子类重写方法权限( public 等 |
)必须大于父类 |
|
子类初始化,默认先初始化父类的构造 super ();父类构造 super 父类的引用 this 没有继承关系也有本类引用的意义 |
object 是所有类的爸爸 this .成员变量 this .成员方法 本类的成员变量和方法 |
子类重写父类的构造,实例的调用就可以用父类的构造 若想使用子类的,还有重载,再次构造一个生成器 |
super () this () 都必须在第一行 |
继承只能单继承 |
但clss A{ |
class B extends A{ |
class C extends B{ |
} |
} |
} 这样多层继承就可以解决单一继承的缺点 |
abstract 抽象方法 的关键字,但接口的抽象类可以省略 |
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
} |
|
|
java中四种访问修饰符 |
Java中的四种访问修饰符: public 、 protected 、 default (无修饰符,默认)、 private 。 |
|
•四种修饰符可修饰的成分(类、方法、成员变量) |
public protected default private |
类 √ × √ × |
|
|
方法 √ √ √ √ |
|
成员变量 √ √ √ √ |
|
|
•四种修饰符的访问权限 |
public :对所有类可见 |
protected :对同一包中的类可见、对同一包及不同包中的子类可见 |
default :对同一包中的类可见、对同一包中的子类可见 |
private :仅对类本身可见 |
可见是可访问的意思,即由这些修饰符修饰的成分(类、方法、成员变量)可以被其它类访问。对子类可见即子类可以继承。 |
这里需要注意的是 protected 与 default ,二者的区别在于不同包中的子类是否可以继承。 |
访问权限 类 同一包 同一包中的子类 不同包中的子类 不同包 |
public |
√ |
|
√ |
|
√ |
|
√ |
|
√ |
|
protected |
√ |
|
√ |
|
√ |
|
√ |
× |
default |
√ |
|
√ |
|
√ |
× × |
private |
√ |
× × × × |
|
•例如 |
package1:ParentClass、ChildClassOne、TestOne |
package2:ChildClassTwo、TestTwo |
package3:TestThree |
其中ParentClass为 |
public class ParentClass { |
public int a= 2 ; |
protected int b = 3 ; |
int c = 4 ; |
private int d = 5 ; |
} |
1 .对于TestOne来说,ParentClass类、a、b、c均可见,d不可见。即在TestOne中可以 new 一个ParentClass对象,且该对象中的a,b,c变量可操作。如下: |
|
public class TestOne { |
public static void main(String args[]) { |
ParentClass obj = new ParentClass(); |
System.out.println(obj.a); |
System.out.println(obj.b); |
System.out.println(obj.c); |
// System.out.println(obj.d); //d 不可见 |
} |
} |
2 . ChildClassOne继承ParentClass且与其在同一个包中,则a、b、c均可见,d不可见。 |
public class ChildClassOne extends ParentClass{ |
public static void main(String args[]) { |
ChildClassOne obj = new ChildClassOne(); |
System.out.println(obj.a); |
System.out.println(obj.b); |
System.out.println(obj.c); |
// System.out.println(obj.d); // d不可见 |
} |
} |
3 . ChildClassTwo继承ParentClass,则a、b均可见,d不可见,由于子类与ParentClass不在同一包中,故c( default 类型)不可见。 |
public class ChildClassTwo extends ParentClass{ |
public static void main(String args[]) { |
ChildClassTwo obj = new ChildClassTwo(); |
System.out.println(obj.a); |
System.out.println(obj.b); |
// System.out.println(obj.c); // c不可见 |
// System.out.println(obj.d); // d不可见 |
} |
} |
4 .对于TestTwo来说,ParentClass类、a均可见,b、c、d不可见。由于TestTwo与ParentClass不在同一个包中,故只有 public 修饰的成分可见。 |
public class TestTwo { |
public static void main(String args[]) { |
ParentClass obj = new ParentClass(); |
System.out.println(obj.a); |
// System.out.println(obj.b); // b 不可见 |
// System.out.println(obj.c); // c 不可见 |
// System.out.println(obj.d); // d 不可见 |
} |
} |
|
•另外值得注意的是继承父类的子类与其他类之间的可见性,取决于其他类与父类之间的可见性。 |
对于TestOne来说,ChildClassOne中a,b,c都可见,d不可见,这是由于TestOne与ParentClass在同一个包中。 |
而对于TestThree来说,ChildClassOne中只有a可见,这是由于TestThree与ParentClass在不同的包中。 |
需要注意: |
虽然a、b对ChildClassTwo可见,TestTwo与ChildClassTwo在同一包中, |
但对于TestTwo来说,ChildClassTwo中只有a可见,这是由于TestTwo与ParentClass在不同的包中,只有 public 修饰的可见。 |
* |
* |
* |
* |
* |
* |
* |
* |
* */ |