关注如下代码段的注释
public class TestA{
int x;//对象数据成员,对象的组成部分,生命周期同对象
static int y;//类的数据成员,生命周期同类,可以理解为所有对象共用同一份
void f(){
};//对象方法,方法中若有this,指向对象
static void g(){
};//属于类方法(不属于对象),不可以使用this
}
void f(){
this.x=30;
x=40;
this.y=30;
TestA.y=30;
y=70;
}//对象方法可以使用类的一切成员
void g(){
TestA ta=new TestA();
ta.x=30;//不可以直接访问x,只能间接访问
g();
y=40;//可以直接访问static成员
}
public static void main(String []args){};//main也是static,不可以直接访问非static成员
包的概念及package语句
A、每一个类应该属于一个包:
包的定义:
package 包名;//必须是第一条语句,且仅有一条
//如:
package cn.edu.njnu.java
包名规则:
1、全小写
2、全球唯一,使用域名
B、import语句:
import java.lang*;//在java中这个包会自动包含
import static java.lang.Math;//静态包含,包含Math里所有静态成员
继承
关注如下代码段的注释
public class Point{
int x;
int y;
...
}
public class Point3D extends Point{
int z;
public Point3D(int x,int y,int z){
super(x,y);//调用父类构造器
this.z=z;
}
int x;//此时父类与自己都有x
public void fun(int x){
super.x=this.x+x;//super.x指父类x,this.x指自己的x,x指参数x
//若参数不是x,那么x指this.x
}
}
现在有三个类:
class A:private int x
class B:private int y
class C
C继承于B,B继承于A
此时:C中有x,y但是不能访问
方法的重写
java中方法的重写:
1、只针对对象的方法(非static方法,static方法只有隐藏与重载)。
2、方法名与参数列表与父类的相同
3、返回值相同或相容
A、java开发的六大原则(重点在前两个)
1、开-闭原则:对继承开放,对修改关闭。
2、LSP原则(里氏代换原则):子类对象可以无缝代替父类对象
如:
Point p1=Point3D();//Point是定义类型,Point3D是运行类型
3、DIP原则(依赖倒换原则):设计要依赖抽象而不是具体化
4、ISP原则(界面分离原则):将大的接口打散成多个小接口
5、CARP原则(复合/聚合复用原则):设计者应当先考虑复合/聚合,而不是继承。
6、LKP原则(最少知识原则):一个对象应该尽可能少的去了解其他对象
例:对任何几何图形求面积
方法一:
double Area(Graph X){
if(X==圆)
...;
if(X==...)
...;
.
.
.
}
若想增加新图形,则必须修改源代码(违背开发开-闭原则)
方法二:
public class Tools{
public static double calArea(Graphix g)
return g.area();//类方法
public static void main(String []args){
Circle g=new Circle();
Tools.calArea(g);//可以直接使用类方法
}
}
public abstract class Graphix{//抽象类
public abstract double area();//抽象方法,求图形面积,所以要在子类中实现
}
public class Circle extends Graphix{
public double area()
return ...;//面积计算方法
}
1、抽象类不可以实例化
2、被子类重写过的方法才叫子类的,其余为父类的
访问控制
public class Tc{
public int x;//所有类可以访问
protected int y;//子类或者同一个包(不是子类)可以访问
int z;//同一个包可以访问
private int w;//本类(本类的对象之间可以访问)自身
}
一个文件中只能有一个public class