面向对象的基本特征: (1)封装 (2)继承 (3)多态 一、封装 (1)隐藏实现细节 (2)安全 封装的范围: (1)属性的封装,方法的封装 (2)组件的封装 (3)系统的封装 封装的实现,靠权限修饰符来控制可见的范围。 4、属性的封装:大多数情况下,属性都是private 如果属性私有化了,提供get、set方法:
public void set属性名(数据类型 形参名){ 属性名 = 形参名; } public 属性的数据类型 get属性名(){ return 属性名;}5 、方法的封装:大多数情况下,属性都是public
public class lianxi08{ public static void main(String[] args){ //1、创建对象 Circle c = new Circle(); //c.radius=1.2 是错误的private只能在本类中使用,可以使用set和get方法 c.setRadius(2.5); System.out.println(c.getRadius() } } class Circle{ private double radius; //仅限本类中直接使用 //set方法,用于在其他类中修改radius的值 public void setRadius(double r){ if(r>0){//是赋值可控 radius=r; } } //get方法,用于在其他类中获取radius的值 public double getRadius(){ return radius; } }类的第三个组成部分: 构造器,也成为构造方法(Circle ())长的像方法,编译后是一个实例初始化方法 1、构造器的作用 (1)构造对象,创建对象 和new一起,每次调用他就是在创建新的对象 (2)可以在创建对象的同时,给属性赋值
Circle c = new Circle(1.2); class lianxi10{ public static void main(String[] args){ Circle c = new Circle();//Circle() 就是一个构造器 } } class Circle{ private double radius; }2、构造器的特点 (1)所有类都有构造器 (2)如果一个类没有显示声明构造器,那么编译器会自动生成一个默认的无参构造 (3)如果一个类显示声明了构造器,那么编译器将不会自动生成默认的无参构造了 (4)构造器的名称必须与类名相同 (5)构造器无返回值,也不写void (6)构造器可以重载 3、构造器的语法结构 重载:在同一个类中,方法名相同,形参列表不同,和返回值类型无关
【修饰符】 类名(){ } 【修饰符】 类名(形参列表){ }回忆
java.util.Scanner input = new java.util.Scanner(System.in);//调用的是有参构造 java.util.Random rand = new java.util.Random();调用的是无参构造 class lianxi10{ public static void main(String[] args){ Circle c = new Circle(1.2);//1.2给半径赋值,在创建对象的同时给属性赋值 c.printInfo() c.setRadius(2.5);//在创建对象后,修改属性值 c.printInfo(); Circle c2 = new Circle();//现创建对象,不给半径赋值 c2.setRadius(3.6); c2.printInfo(); } } class Circle{ private double radius; //double r 构造器的形参列表 public Circle(doyble r){ radius=r;//给半径赋值 } public Circle(){//无参构造 }//这两个构造器构成重载 public void printInfo(){ System.out.println("半径"+radius} } public void setRadius(double r){ radius=r; }练习
class lianxi11{ public static void main(String[] args){ Student s1 =new Student();/无参构造 s1.setInfo("V",25,100); System.out.println(s1.getInfo()); Student s2 =new Student("JK",23,100);//有参构造 System.out.printlv(s2.geInfo()); //修改数据 s2.setInfo("JK",23,120); System.out.println(s2.getInfo()); } } class Student{ private String name; private int age; private double score; public Student(){ } public Student(String n,int a,double s){ name=n; age=a; score=s; } public void setInfo(String n,int a,double s){ name=n; age=a; score=s; } public String getInfo(){ return "姓名:"+name+",年龄:"+age+"成绩:"+score;} }