一、面向对象编程的三个特性
1)封装
面向对象编程核心思想之一就是将数据和对数据的操作封装在一起。通过抽象从具体的实例中抽取共同的性质形成一般的概念,比如类的概念。
人们经常谈到的机动车类就是从具体的实例中抽取共同的属性和功能形成的一个概念,那么一个具体的轿车就是机动车类的一个实例,即对象。
一个对象将自己的数据和对这些数据的操作合理有效地封装在一起,例如,每辆轿车调用“加速”、“减速”改变的都是自己的运行速度。
2)继承
继承体现了一种先进的承接历史的编程模式。子类可以继承父类的属性和功能,即继承了父类所具有的数据和对数据的操作,同时又可以增添子类独有的数据和对数据的操作。
3)多态
多态是面向对象编程的又一重要特征。
有两种意义的多态。
一种是操作名称的多态,即有多个操作具有相同的名字,但这些操作所接收的参数类型必须不同。
另一种多态是和继承有关的多态,是指同一个操作被不同类型对象调用时可能产生不同的行为。
3.2封装
也可以把另一个类放在同目录下的其他文件里
加载形成两个类,有psvm的为主类,运行主方法(psvm为主方法),用cmd运行时要运行“java --带主方法的类—”
package com.example;
//加载形成两个类,有psvm的为主类,运行主方法(psvm为主方法),用cmd运行时要运行“java --带主方法的类---”
import java.io.PrintStream;
public class javahello_2 {
public static void main(String[] args) {
Circle2 circle;
circle=new Circle2();
circle.radius=100;
double are=circle.getARE();
System.out.println(are);
}
}
class Circle2 {
double radius;
double getARE(){
double are=3.14*radius*radius;
return are;
}
}
在主方法中可以 new主类
class Circle {
double radius;
double getARE(){
double are=3.14*radius*radius;
return are;
}
public static void main(String[] args) {
Circle circle;
circle=new Circle();
System.out.println(circle.toString());///返回一个object字符串
}
}
class ComputerCircleArea { //包内可见
public static void main(String args[]) {
double radius; //半径
double area; //面积
radius=100;
area=3.14*radius *radius; //计算面积
System.out.printf("半径是%5.3f的圆的面积:\n%5.3f\n",radius,area);
}
}
public class Circle2{
double radius; //半径
double area; //面积
private double getArea(){
Circle2 c1;
return 3.14*radius*radius;
}
public static void main(String sf[]) {
Circle2 c;
c=new Circle2(); //Object
c.radius=10;
System.out.println(c.getArea()); //Circle2@15db9742
}
}
class CircleTest{
public static void main(String sf[]) {
Circle2 c;
c=new Circle2(); //Object
c.radius=10;
System.out.println(c.getArea()); //Circle2@15db9742
}
}
例子
this
分别用do-while和for循环计算1+1/2!+1/3!+1/4!… … 的前10项和
package com.example;
///Jisuanqi1 是for Jisuanqi2 是dowhile 同时输出,结果一样
public class javahello_2 {
public static void main(String[] args) {
Jisuanqi1 jisuanqi1=new Jisuanqi1();
Jisuanqi2 jisuanqi2=new Jisuanqi2();
double ans2=0,ans1=0;
int n=10;
for(int i=1;i<=n;i++)
{
ans1+=1/jisuanqi1.jiecheng(i);
///
// System.out.println(jisuanqi1.jiecheng(i));
///
}
int i=1;
do {
ans2+=1/jisuanqi2.jiecheng(i);
///
//System.out.println(jisuanqi2.jiecheng(i));
///
i++;
}while (i<=n);
System.out.println(ans1+" "+ans2);
}
}
class Jisuanqi1{
double a;
double ans;
double jiecheng(double a){一定要重新赋值
this.a=a;
this.ans=1;
for(int i=1;i<=a;i++)
{
ans*=i;
}
return ans;
}
}
class Jisuanqi2{
double a;
double ans;
int i;
double jiecheng(double in){
ans=1;
i=1;
a=in;
do{
ans*=i;
i++;
}while (i<=a);
return ans;
}
}