这篇博客总结了1天,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用.

**转载请注明 出自 : luogg的博客园 ** ,

因为前不久偶然发现某网站直接复制粘贴我的博客,交谈之后他们修改了出处.

封装

一, 封装的概念

  1. 类可以看成一个封装体,将对象的属性和方法封装到类中.
  2. 把不希望外界看到或调用的属性或方法用private 关键字修饰, 然后在属性或方法的类中创建一个可以间接让外部使用属性或方法的通道.

二, 封装的实现

  • 通常将类中的成员变量私有化 (private) ,那么再通过这个类创建对象后就不能访问该类的变量 , 通过对外提供方法(setXxx,getXxx),可对该变量(xxx)进行访问。
  • boolean 类型的变量没有 getXX,只有 isXX;
  • IDE中可以右键source 快捷的设置变量的seter和geter方法
  • get方法有返回值和return
  • set方法无返回值,担有形参
public int getAge() {
System.out.println(name + "的年龄是 : " + age);
return age;
}
public void setAge(int age) {
this.age = age;
}

三, this关键字的作用

1. 表示本类中的(age)属性

this.age = age;

2. this([实参]); 表示在构造方法中调用构造方法. 应写在构造方法中的第一行, 不然会报错,构造方法中只能使用一次.

//	设置构造函数
public Person() {
System.out.println("这是有0个参数的构造方法");
}
public Person(String name) {
this.name = name;
System.out.println("这是有一个参数的构造方法");
}
public Person(String name , int age , char sex) {
this("张三");
System.out.println("这是有3个参数的构造方法");
} ================= public class PersonTest {
public static void main(String[] args) {
Person p1 = new Person("",10,'男');
}
}

执行之后:

3. this表示当前对象

	//	this 的第三种用法:表示当前对象
====ThisPerson类=====
public void run() {
System.out.println("runing....");
System.out.println(this);
}
======主类======
ThisPerson p3 = new ThisPerson();
p3.run();
System.out.println(p3 + "\n");

执行结果:

四, 构造方法 :

创建类的对象并初始化,具体方法day04写了.

五, 类的设计分析

根据要求写出类所包含的字段;

所有的字段(属性)都必须私有化;

封装之后的字段可通过 setter 和 getter 设值和取得;

按需求可添加若干构造方法;

根据需求可添加相应的方法;

类中的所有方法都不要直接处理(输出打印),而是交给调用者去处理。

六, static(静态) 关键字的使用

  • static修饰的属性或方法称为静态属性或者静态方法.
  • 一旦属性或方法被static修饰,可以直接通过类名.方法()或者类名.属性调用.
  • 被static修饰的方法, 程序运行后不管用不用得到都会进入内存中的静态区.
  • 随着类的加载而加载, 优先于对象存在 , 被所有对象所共享 , 可以直接被类名调用
  • 静态方法只能访问静态成员, 非静态方法可以访问静态方法.
  • 静态方法中不可以使用this,super关键字
=====StaticPerson类中定义静态属性========
public class StaticPerson {
static String name;
int age;
char sex;
} ======主类==== public class TestStatic {
public static void main(String[] args) {
StaticPerson.name = "张三";
System.out.println(StaticPerson.name);
fun();
}
public static void fun() {
System.out.println("run..");
StaticPerson.name = "张三";
System.out.println(StaticPerson.name);
}
}

输出结果:

====================================

继承

一, 继承概念及优点

子类扩展其父类的功能,达到类的重用,降低开发成本

优点:

1、提高了代码的复用性。

2、让类与类之间产生关系,有了这个继承关系才有了多态的特性。

3、Java 语言中只支持单继承(有别于 C 语言)。因为多继承容易带来安全隐患(父类多了, 功能相同的话,就会出现调用不确定性,覆写一个方法,到底覆写的谁的?),但是java支持多层继承,即祖孙关系,祖先关系

二, 继承的实现

父类:超类,基类

子类:派生类

格式:

访问修饰符 class 子类名 extends 父类名(){}

三, 继承的限制

  • 在java中只允许单继承
  • 子类不能继承父类的私有成员
  • 父类的构造方法也不可以继承

四, 子类对象实例化过程

1、先实例化父类构造方法为父类中的属性初始化

2、再实例化子类构造方法

实质:在子类的构造方法中隐藏了一个 super()方法,调用父类中的构造方法

=======父类======
public class Person1 {
int age = fun(); public Person1() {
System.out.println("父类的构造方法被调用了");
}
public int fun() {
System.out.println("父类属性方法被执行了");
return 0;
}
} ============子类===============
public class Person1Test extends Person1 {
int age = info(); public Person1Test() {
//super();隐藏了,它默认先调用父类的构造方法
System.out.println("子类的构造方法被执行");
} public int info() {
System.out.println("子类的属性被执行");
return 0;
}
} =============主函数============
public static void main(String[] args) {
Person1Test p1 = new Person1Test();
}

===输出结果=

五, super关键字的使用

1, 调用父类中的构造方法 super([参数]);

2, 调用父类中的普通方法 super.普通方法();

3, 调用父类中的属性 super.属性;

======父类Person类======

	public Person() {
System.out.println("父类无参构造方法被调用");
}
public Person(String name) {
System.out.println("父类一个参数的构造方法被调用");
} public String fun() {
System.out.println("父类中的属性被初始化了");
return name; =========子类Student类========
public void run(int id) {
super.fun();
System.out.println("子类的属性被初始化");
} public Student() {
super("张三");
System.out.println("子类构造方法被调用");
} ===========主函数===========
public static void main(String[] args) {
Student s1 = new Student();
s1.id = 10;
System.out.println(s1.id);
}

输出结果:

六,包及访问权限

包的使用:import 包名.子包名.* 或 import 包名.子包名.类

访问修饰符:

七, 方法的重写

当父类的某个方法不适合于子类本身的特征行为时就当覆写父类中应当改变的方法。

方法覆写时应遵循的原则(一同两小一大):

(一同):方法签名必须相同;

(两小):

子类方法的返回值类型比父类方法的返回值类型更小或相等

子类方法声明抛出的异常应比父类方法申明抛出的异常更小或相等;

(一大):子类方法的访问权限应比父类方法更大或相等;

实现规则:

(1)在子类中定义了与父类中同名的方法;
(2)方法名称、参数类型、返回值类型、全部相同
(3)并且子类中的的同名方法的访问权限不用比父类中的同名方法更严格 private访问修饰符 权限最低,最严谨
====父类====
public class Person {
public void run() {
System.out.println("父类正在跑步...");
}
}
====子类===
public class Student {
public void run() {
System.out.println("子类正在跑步!!!");
}
}
====主函数====
public static void main(String[] args) {
Student s = new Student();
s.run();
}

输出结果 : 子类正在跑步!!!

八, final 关键字的使用

作用:

(1)声明类:声明类的时候表示该类不能再被继承

(2)声明方法:声明方法的时候表示该方法不能在被子类被覆写

(3)声明变量:声明变量的时候表示该变量变成常量(常量:一旦赋值之后,里面的值不能再变)

九, 难点

重写和重载的区别

super关键字和this关键字的区别

十,语句块

普通块

写在方法里面的 (方法, if语句 switch等等)

{}

构造块

写在类里边 {}

静态块

写在类里边 static{}

执行的先后顺序 :

静态快先被执行

构造块之后被执行

构造方法最后被执行

静态块只在创建对象时候执行一次,不管创建多少个对象,只执行一次

luogg_java学习_06_面向对象特性之封装和继承的更多相关文章

  1. Javascript面向对象特性实现封装、继承、接口详细案例——进级高手篇

    Javascript面向对象特性实现(封装.继承.接口) Javascript作为弱类型语言,和Java.php等服务端脚本语言相比,拥有极强的灵活性.对于小型的web需求,在编写javascript ...

  2. Javascript面向对象特性实现封装、继承、接口详细案例

    Javascript面向对象特性实现(封装.继承.接口) Javascript作为弱类型语言,和Java.php等服务端脚本语言相比,拥有极强的灵活性.对于小型的web需求,在编写javascript ...

  3. Java语言中的面向对象特性:封装、继承、多态,面向对象的基本思想(总结得不错)

    Java语言中的面向对象特性(总结得不错) [课前思考] 1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类? 2. 面向对象编程的特性有哪三个?它们各自又有哪些特性? 3. 你知道jav ...

  4. (转载)OC学习篇之---类的三大特性:封装,继承,多态

    之前的一片文章介绍了OC中类的初始化方法和点语法的使用,今天来继续学习OC中的类的三大特性,我们在学习Java的时候都知道,类有三大特性:继承,封装,多态,这个也是介绍类的时候,必须提到的话题,那么今 ...

  5. 黑马程序猿——JAVA面向对象的特性:封装,继承,多态

                                           - ----------android培训.java培训.java学习型技术博客.期待与您交流!------------  ...

  6. PHP其它常用函数;<<<面向对象(OPP)的三大特性:封装、继承、加态:>>> <----面试题 ;构造方法、析构方法,魔术方法、set、get方法;静态;抽象类;接口

    PHP其它常用函数:     赋值:$r->name = "元素";      取值: echo $r->name;  count()   计算数组中的元素数目或对象中 ...

  7. .NET面向对象特性之封装

    .NET面向对象特性之封装 面向对象的基本内容由:类.对象.属性.方法.字段构成. 面向对象的三大特性:继承.多态.封装. 关于面向对象的特性很多人都把目光转向了继承.多态和接口,却很少有人提及过封装 ...

  8. Python 面向对象的三大特性:封装,继承,多态

    # 面向对象的三大特性:封装,继承,多态 # 继承的影响:资源的继承,资源的使用,资源的覆盖,资源的累加 # 资源的继承,在Python中的继承是指能使用父类的资源,而不是说在子类也复制一份父类代码到 ...

  9. java三大特性(封装、继承、多态)

    oop(面向对象程序设计)具有三大特性:封装.继承.多态 一.封装 封装就是讲类的信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类的实现隐藏信息的操作和访问. 实现封装 1.需要修改属性的访问 ...

随机推荐

  1. Unit Testing with NSubstitute

    These are the contents of my training session about unit testing, and also have some introductions a ...

  2. 安装 mysql-5.7.5-m15-winx64

    win7 64位下如何安装配置mysql-5.7.5-m15-winx64 距离上次安装MySQL已经过去好久了.步骤这些,有可能会忘记.简单记录一下吧.(参考了一些网络上的博客.) 1.mysql- ...

  3. JavaScript面试时候的坑洼沟洄——逗号、冒号与括号

    看完了javaScript数据类型和表达式与运算符相关知识后以为可以对JavaScript笔试题牛刀小试一把了,没想到有一次次的死在逗号,冒号和括号上,不得已再看看这几个符号吧. 逗号 逗号我们常见的 ...

  4. 详解 JavaScript的 call() 和 apply()

    定义 ECMAScript规范为所有函数都包含两个方法(这两个方法非继承而来), call 和 apply .这两个函数都是在特定的作用域中调用函数,能改变函数的作用域,实际上是改变函数体内 this ...

  5. eclipse中的javac命令与java命令

    一.eclipse的javac命令:当eclipse对.java(源文件)文件进行保存操作时(快捷键ctrl+s),会执行javac命令.见上图,Default output folder(默认输出文 ...

  6. iOS---runtime介绍

    本文目录 1.Runtime简介 2.Runtime相关的头文件 3.技术点和应用场景 3_1.获取属性\成员变量列表 3_2.交换方法实现 3_3.类\对象的关联对象,假属性 3_4.动态添加方法, ...

  7. junit测试,使用classpath和file 加载文件的区别

    用junit测试发现一个问题,怎么加载配置文件?一直都出现这样的错误 ERROR: org.springframework.test.context.TestContextManager - Caug ...

  8. python django基础(一)

    Django简介:Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的框架模式,即模型M,视图V和控制器C.不过在Django实际使用中,Django更关注的是模型(Mod ...

  9. 【.NET深呼吸】清理对象引用,有一个问题容易被忽略

    大家知道,托管代码一个重要的特点是自动管理内存,即我们常说的垃圾回收机制,那些高大上的理论我就不重复了,有兴趣的朋友可以翻书.我这个有个毛病——不喜欢很严肃地去说一些理论的东西,所以我不多介绍了. 一 ...

  10. 【转】WPF: 自动设置Owner的ShowDialog 适用于MVVM

    原文地址:http://www.mgenware.com/blog/?p=339 WPF中的Windows的ShowDialog方法并没有提供设置Owner的参数,开发者需要在ShowDialog前设 ...