菜鸟学Java第三天 关于继承及其他
Java语言是一种彻底的面向对象语言,对象就是类的变量,因此类变量与类对象是一个意思。Java程序中,任
何一个函数、变量等都必须有一个归宿(从属于某个类),不允许有游离于类之外的函数或变量的存在(在这
一点上Java和C/C++语言是不同的)。
main函数是类的特殊成员函数,只有包含main函数的类才能独立运行。而且任何一个Java应用程序中都必须包
含一个main函数,它是程序运行是的人口:运行程序实际上就是运行类的main主函数,当主函数执行完毕时,
程序就结束了。main函数是程序运行是系统自动调用的函数,我们习惯将其称为主函数。在实际编程时,我们
通常把main函数单独放在一个类中,但也可以不单独设立主函数类,而把main主函数放在具体定义的某个类中
。
类中不用public、private或者protected修饰的成员变量称为类的“友好成员”,有好成员可以在同一个文件
包中其他类里面通过类变量进行调用。默认的类修饰符是“友好类”。
从一个工程复制类文件时,类文件的包名随之自动更改,因此类文件的复制不仅仅是文件的复制,文件中的代
码也随之做了适应性更改。
Java中不能在函数外对已经初始化的变量进行赋值。
类变量定义与基本变量有着本质的区别:后者在变量定义的同时就分配了内存空间,因此就实际存在了,而类
变量在定义后内存中还没有分配空间,所以此时的类变量是不存在的。
子类通过继承机制,可以把父类中的成员变为自己的成员,但父类中的私有成员在子类是“看不见”的;对于
父类和子类在同一文件包中的情况,父类中的非私有成员在子类中访问权限不变:父类中的共有成员也是子类
的共有成员,父类中的受保护成员也是子类中的受保护成员,父类中的友好成员在资料中仍是友好成员。
private 变量
父类
package gc;
class circle {
private double r;
public circle(double r) {
this.r = r;
}
public double getArea(int r) {
return Math.PI*r*r;
}
}
子类
package gc;
public class cylinder extends circle {
private double heitht;
public cylinder(double r, double heitht) {
super(r);
this.heitht = heitht;
}
public double getParR()
{
return r;//这两种形式都会报错The field circle.r is no visible
//return super.r;
}
}
当将父类修改为默认或者是public时如下:
package gc;
class circle1 {
double r;//或者为public double r;
public circle1(double r) {
this.r = r;
}
public double getArea(int r) {
return Math.PI*r*r;
}
public double getR() {
return r;
}
public void setR(double r) {
this.r = r;
}
}
此时子类的两种调用形式都运行正常。
对父类成员变量的访问一般采用在父类中添加public访问属性的set和get方法的形式,然后在子类调用相应的
set和get方法即可,这样既做到信息的隐蔽,有保证了安全。如下:
package gc;
class circle {
private double r;
public circle(double r) {
this.r = r;
}
public double getArea(int r) {
return Math.PI*r*r;
}
public double getR() {
return r;
}
public void setR(double r) {
this.r = r;
}
}
public class cylinder extends circle {
private double heitht;
public cylinder(double r, double heitht) {
super(r);
this.heitht = heitht;
}
public double getParR()
{
return getR();
}
}