一、面向对象与面向过程的区别
面向对象:
--把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象。
--对同类对象抽象出其共性,形成类。类中的大多数数据,只能用本类的方法进行处理。
--类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。
--程序流程由用户在使用中决定。
面向过程:
--自顶向下顺序执行,逐步求精;
--其程序结构是按功能划分为若干个基本模块,这些模块形成一个树状结构;
--各模块之间的关系尽可能简单,在功能上相对独立;
--每一模块内部均是由顺序、选择和循环三种基本结构组成;
--其模块化实现的具体方法是使用子程序。
--程序流程在写程序时就已决定。
二、封装性
封装机制在程序设计中表现为:
--把描述对象属性的变量及实现对象功能的方法合在一起,定义为一个程序单位,并保证外界不能任意更改其内部的属性值,也不能任意调用其内部的功能方法。
--为封装在一个整体内的变量及方法规定不同级别的“可见性”或访问权
一类就是对对象的封装(一个Student类)
注意点
(1)一个类中必须有构造方法(如果你没构造方法实例对象后是对的,那是因为类默认有一个无参构造方法)
如:Student stu = new Student();这里实例一个对象是通过无参构造方法实现的
(2)想实例时对成员属性赋值,就需要有有参构造方法(当又想实例一个无参对象时出错了,那是因为有参构造方法覆盖了无参构造方法,无参构造方法需要写出来,而不能使用默认的了)
package chapter.three; public class Student { private String name; private String sex; private int age; private String school; //有参构造构造方法 public Student(String name, String sex, int age, String school) { super(); this.name = name; this.sex = sex; this.age = age; this.school = school; } //无参构造方法 public Student() { super(); } //以下是私有成员属性的Setters和Getters方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSchool() { return school; } public void setSchool(String school) { this.school = school; } //重写toString()方法打印成员属性 @Override public String toString() { return "Student [name=" + name + ", sex=" + sex + ", age=" + age + ", school=" + school + "]"; } }
匿名对象
作用:实际开发中基本上都是作为其他类实例化对象的参数传递的
class Test05{ public static void main(String[] args) { new Student("xiao", "男", 35, "清华");//匿名对象 } }
内部类
package com.qianfeng.OuterInner; //外部类值允许有四个修饰符 public defualt abstract final public class StaticNBL { static String name = "小华"; static class Inner{ //静态内部类里面可以有静态方法和静态属性 static String name = "小红"; private int age = 15; public void print(){ System.out.println(StaticNBL.name+this.name+age); } } public static void main(String[] args) { //StaticNBL.Inner inner = new StaticNBL.Inner();这种方法更好,导包没导类名也不会出错 Inner inner = new Inner(); inner.print(); } }