java封装性、继承性及关键字
方法的参数传递(重点、难点)
1.形参:方法声明时,方法小括号内的参数
实参:调用方法时,实际传入的参数的值
2.规则:java中的参数传递机制:值传递机制
1)形参是基本数据类型的:将实参的值传递给形参的基本数据类型的变量
public static void main(String[] args) {
TestArgsTransfer tt = new TestArgsTransfer(); int i = 10;
int j = 5;
System.out.println("i:" + i + " j:" + j);//i : 10 j : 5 // //交换变量i与j的值
// int temp = i;
// i = j;
// j = temp;
tt.swap(i, j);//将i的值传递给m,j的值传递给n System.out.println("i:" + i + " j:" + j);//i : 10 j : 5 }
//定义一个方法,交换两个变量的值
public void swap(int m,int n){
int temp = m;
m = n;
n = temp;
System.out.println("m:" + m + " n:" + n);
2)形参是引用数据类型的:将实参的引用类型变量的值(对应的堆空间的对象实体的首地址值)传递给形参的引用类型变量。
public class TestArgsTransfer1 {
public static void main(String[] args) {
TestArgsTransfer1 tt = new TestArgsTransfer1();
DataSwap ds = new DataSwap(); System.out.println("ds.i:" + ds.i + " ds.j:" + ds.j); tt.swap(ds);
System.out.println(ds); System.out.println("ds.i:" + ds.i + " ds.j:" + ds.j); }
//交换元素的值
public void swap(DataSwap d){
int temp = d.i;
d.i = d.j;
d.j = temp;
System.out.println(d);//打印引用变量d的值
}
} class DataSwap{
int i = 10;
int j = 5;
一、面向对象的特征一:封装与隐藏
问题:当创建了类的对象以后,如果直接通过"对象.属性"的方式对相应的对象属性赋值的话,可能会出现不满足实际
情况的意外,我们考虑不让对象来直接作用属性,而是通过"对象.方法"的形式,来控制对象对属性的访问。实际
情况中,对属性的要求就可以通过方法来体现。
二、面向对象思想的落地法则二:
(封装性的思想)①将类的属性私有化,②提供公共的方法(setter & getter)来实现调用。
三、四种权限修饰符
1.权限从大到小为:public protected 缺省 private
2.四种权限都可以用来修饰属性、方法、构造器
3.修饰类的话:public 缺省
this关键字:
1.使用在类中,可以用来修饰属性、方法、构造器
2.表示当前对象或者是当前正在创建的对象
3.当形参与成员变量重名时,如果在方法内部需要使用成员变量,必须添加this来表明该变量时类成员
4.在任意方法内,如果使用当前类的成员变量或成员方法可以在其前面添加this,增强程序的阅读性
5.在构造器中使用“this(形参列表)”显式的调用本类中重载的其它的构造器
5.1 要求“this(形参列表)”要声明在构造器的首行!
5.2 类中若存在n个构造器,那么最多有n-1构造器中使用了this。
public class TestPerson {
public static void main(String[] args) {
Person p1 = new Person();
System.out.println(p1.getName() + ":" + p1.getAge()); Person p2 = new Person("BB",23);
int temp = p2.compare(p1);
System.out.println(temp);
}
}
class Person{ private String name;
private int age; public Person(){
this.name = "AA";
this.age = 1;
} public Person(String name){
this();
this.name = name;
}
public Person(String name,int age){
this(name);
this.age = age;
} public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void eat(){
System.out.println("eating");
}
public void sleep(){
System.out.println("sleeping");
this.eat();
}
//比较当前对象与形参的对象的age谁大。
public int compare(Person p){
if(this.age > p.age)
return 1;
else if(this.age < p.age)
return -1;
else
return 0;
} }
package:声明源文件所在的包,写在程序的第一行。
每“.”一次,表示一层文件目录。
包名都要小写。
import:
1)显式导入指定包下的类或接口
2)写在包的声明和源文件之间
3)如果需要引入多个类或接口,那么就并列写出
4)如果导入的类是java.lang包下的,如:System String Math等,就不需要显式的声明。
5)理解.*的概念。比如java.util.*;
6)如何处理同名类的导入。如:在util包和sql包下同时存在Date类。
7)import static 表示导入指定类的static的属性或方法
8)导入java.lang.*只能导入lang包下的所有类或接口,不能导入lang的子包下的类或接口
面向对象特征二:继承性
通过"class A extends B"类实现类的继承。
子类:A 父类(或基类 SuperClass):B
子类继承父类以后,父类中声明的属性、方法,子类就可以获取到。
明确:当父类中有私有的属性或方法时,子类同样可以获取得到,只是由于封装性的设计,使得子类不可以直接 调用罢了。
子类除了通过继承,获取父类的结构之外,还可以定义自己的特有的成分。
extends:子类是对父类功能的“扩展”,明确子类不是父类的子集。
.java中类的继承性只支持单继承:一个类只能继承一个父类。反之,一个父类可以有多个子类。
子父类是相对的概念。
方法的重写(override orverwrite) vs 重载(overload)
方法的重载与重写的区别?
重载:“两同一不同”:同一个类,同一个方法名,不同的参数列表。 注:方法的重载与方法的返回值无关!
>构造器是可以重载的
重写:(前提:在继承的基础之上,子类在获取了父类的结构以后,可以对父类中同名的方法进行“重构”)
方法的返回值,方法名,形参列表形同;权限修饰符不小于父类的同名方法;子类方法的异常类型不大于父类的;
两个方法要同为static或同为非static。
super关键字:
1.super,相较于关键字this,可以修饰属性、方法、构造器
2.super修饰属性、方法:在子类的方法、构造器中,通过super.属性或者super.方法的形式,显式的调用父类的指定
属性或方法。尤其是,当子类与父类有同名的属性、或方法时,调用父类中的结构的话,一定要用“super.”
3.通过“super(形参列表)”,显式的在子类的构造器中,调用父类指定的构造器!
>任何一个类(除Object类)的构造器的首行,要么显式的调用本类中重载的其它的构造器“this(形参列表)”或显式的调用父类中
指定的构造器“super(形参列表)”,要么默认的调用父类空参的构造器"super()"
>建议在设计类时,提供一个空参的构造器!
用new调用子类构造器来创建子类对象之前必须现在子类构造器中调用一个父类构造器来初始化父类,以保证子类能够使用父类继承下来的成员。
子类构造器使用super隐式或显式来调用父类构造器的。隐式是指在子类构造器中没有使用super和this时,系统自动在子类构造器中第一行语句之前隐式默认加上super()来调用父类无参构造器,此时如果
父类没有super()所对应的无参构造器,则会出错,反之显式使用super或this时,系统不会在此子类构造器中再提供隐式的super(),即会显式使用的super或this来替代隐式的super()。
因为隐式的速配而()默认是在第一行语句之前,所以显式使用的super需要放在第一行才可以覆盖隐式的super()。
那么this也必须放在第一行,是应为有this的构造器不再有任何的super,表面是不能直接调用父类构造器,但是this调用了子类中的其他构造器,这个被调用的子类构造器里有super来调用父类构造器,所以有this的构造器只是间接的通过子类中的其他构造器来调用父类构造器,所以this放在第一行。
***宠物练习***
package petlianxi; public class Pet {
String name;
private int age;
private int helthy;
private int hungry;
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public int getHelthy() {
return helthy;
} public void setHelthy(int helthy) {
this.helthy = helthy;
} public int getHungry() {
return hungry;
} public void setHungry(int hungry) {
this.hungry = hungry;
} public int getHappy() {
return happy;
} public void setHappy(int happy) {
this.happy = happy;
} private int happy; public void Showinfo(){
System.out.println(name);
System.out.println(age);
System.out.println(helthy);
System.out.println(hungry);
System.out.println(happy);
} public void eat(){
if(!check1()){
System.out.println("你家宝宝生病了");
}
System.out.println("宝宝吃饱饱了。。。");
this.helthy+=5;
this.hungry-=10;
this.happy+=5;
}
public boolean check1(){
if(helthy>0&&hungry>0&&happy>0){
return true;
}else if(hungry<0){
hungry=0;
}
else if(helthy<0){
helthy=0;
}
else if(happy<0){
happy=0;
}return false; }
public void play(){
if(!check1()){
System.out.println("你家宝宝生病了");
}else{
System.out.println("宝宝好高兴。。。");
this.helthy+=6;
this.hungry+=5;
this.happy-=18; }
} public Pet(){ } public Pet(String name){
this.name=name;
this.age=1;
this.helthy=100;
this.happy=80;
this.hungry=80;
}
}
package petlianxi; public class cat extends Pet{
String sex;
String name;
public cat(String name,String sex){
/*super.setName(name);*/
this.sex=sex;
super.name=name;
this.name=name;
} }
package petlianxi; import java.util.Scanner; public class text { public static void main(String[] args) {
cat c=new cat("huahua","男");
Scanner sc=new Scanner(System.in);
boolean flag=true;
while(flag){
ShuoMing();
String s=sc.nextLine();
if("1".equals(s)){
c.Showinfo();
}else if("2".equals(s)){
c.eat();
}else if("3".equals(s)){
c.play();
}else if("bye".equals(s)){
flag=false;
}
}sc.close(); }
public static void ShuoMing(){
System.out.println("1--宝宝状态");
System.out.println("2--喂宝宝吃饭");
System.out.println("3--与宝宝玩耍");
}
}
public class backing {
String customname;
int yue;//余额
int qianshu;
public void cun(){
yue+=qianshu;
System.out.println("您的余额:"+this.yue);
}
public void qu(){
yue-=qianshu;
if(!checkl()){//把判断语句放在运算后边因为只有运算过后才会知道剩余的钱数是否够取出的
System.out.println("对不起,您的余额不足");
yue+=qianshu;
}
System.out.println("您的余额:"+this.yue);
}
public boolean checkl(){
if(yue<0){
return false;
}else{return true;}
}
}
package bancking; public class custom extends backing{
int mima;
public custom(String customname,int yue,int mima){
this.customname=customname;
this.yue=yue;
/*this.qianshu=qianshu;*/
this.mima=mima;
System.out.println("客户名: "+this.customname+" 余额: "+this.yue);
} }
package bancking; import java.util.Scanner; public class text { public static void main(String[] args) {
custom cs=new custom("小王",30000,111111); Scanner sc=new Scanner(System.in);
System.out.print("请输入您的银行卡密码"); boolean flag=true;
while(flag){
cs.qianshu=sc.nextInt();
if(cs.qianshu>0){
cs.cun();
}else if(cs.qianshu<0){
cs.qianshu=cs.qianshu*-1;
cs.qu();
}if(cs.yue<0){
flag=false;}
}sc.close();
}
}
java封装性、继承性及关键字的更多相关文章
- 菜鸡的Java笔记 第十一 - java 封装性
1.1封装的基础实现. 封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口.面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治.封装的对象,这些对象通过一个受保 ...
- java封装性
原先是class Person{ public string name; public int age } public void main{ Person person=new person(); ...
- java封装性之private
public class TestDemo{ public static void main(String args[]){ Person perA= new Person(); perA.setNa ...
- Java学习:面向对象的三大特征:封装性、继承性、多态性之继承性
面向对象的三大特征:封装性.继承性.多态性. 继承 继承是多态的前提 ,如果没有继承,就没有多态. 继承主要解决的问题就是:共性抽取. 继承关系当中的特点: 子类可以拥有父类的“内容” 子类还可以拥有 ...
- Java面向对象设计主要有三大特征:封装性、继承性和多态性
Java面向对象设计主要有三大特征:封装性.继承性和多态性 一 封装性 1.1 概念:它是将类的一些敏感信息隐藏在类的类部,不让外界直接访问到,但是可以通过getter/setter方法间接访 ...
- Java学习:面向对象三大特征:封装性、继承性、多态性之多态性。
面向对象三大特征:封装性.继承性.多态性之多态性. extends继承或者implemens实现,是多态性的前提. 例如:小菜是一个学生,但同时也是一个人.小菜是一个对象,这个对象既有学生形态,也有人 ...
- Java面向对象(封装性概论)
Java面向对象(封装性概论) 知识概要: (1)面向对象概念 (2)类与对象的关系 (3)封装 (4)构造函数 (5)this关键字 (6)static关键 ...
- [ Java学习基础 ] Java的封装性与访问控制
Java面向对象的封装性是通过对成员变量和方法进行访问控制实现的,访问控制分为4个等级:私有.默认.保护和公有,具体规则如下表: 1.私有级别 私有级别的关键字是private,私有级别的成员变量和方 ...
- Java中封装性的使用
//Java面对对象基本特性之一:封装性 //作用:保护某些属性和方法不被外部所看见 //封装的实现:通过关键字private声明 //鼠标右键--->Source---->Generat ...
随机推荐
- [HDU1004] Let the balloon rise - 让气球升起来
Problem Description Contest time again! How excited it is to see balloons floating around. But to te ...
- C#码农的大数据之路 - 使用Ambari自动化安装HDP2.6(基于Ubuntu16.04)并运行.NET Core编写的MR作业
准备主机 准备3台主机,名称作用如下: 昵称 Fully Qualified Domain Name IP 作用 Ubuntu-Parrot head1.parrot 192.168.9.126 Am ...
- 一天搞定CSS:字体font--04
1.字体体系 2.字体各属性取值 说明: 每一个属性后面的分支是属性值,以及对属性值的说明. 比如font-weight- - - -有两个取值:bold,normal 3.演示代码 <!DOC ...
- HashSet集合
HashSet特点 1.无序,不允许重复(无序指元素顺序与添加顺序不一致,每次遍历出来的位置不是恒久不变的) 2.HashSet通过调用hashCode()和equals方法来剔除重复 3.HashS ...
- iHover – 30+ 纯 CSS3 实现的超炫的图片悬停特效
iHover 是一个令人印象深刻的图片悬停效果集合,完全基于 CSS3 实现,无依赖,能够搭配 Bootstrap 3 很好地工作.基于 SCSS 技术构建(包括文件),便于修改变量.有模块化的代码, ...
- 高性能迷你React框架anu在低版本IE的实践
理想是丰满的,现实是骨感的,react早期的版本虽然号称支持IE8,但是页面总会不自觉切换到奇异模式下,导致报错.因此必须让react连IE6,7都支持,这才是最安全.但React本身并不支持IE6, ...
- HTTPS协议入门
目录什么是https?https的利与弊?https的原理和流程?什么是证书/CA证书?什么是单向SSL认证与双向SSL认证?网站如何实现https?网站实现https的一些补充说明参考网页 一.什么 ...
- IBM芯片新功能:诊断癌症
治愈任何疾病的最好方法是什么?-------------- 当然是把它扼杀在摇篮里. "早发现早治疗"已经是老生常谈,但要准确监测疾病又谈何容易?不过现在,IBM这枚小小的芯片就能 ...
- ip地址0.0.0.0与127.0.0.1的区别(转载)
原文链接:http://blog.csdn.net/ttx_laughing/article/details/58586907 最近在项目开发中发现一个奇怪的问题,当服务器与客户端在同一台机器上时,用 ...
- maven打包 bat自动化打包
maven打包,首先cd到项目根目录,如果想跳过测试阶段,可用:mvn package -DskipTests bat命令,说明start是打开文件夹的意思:e: cd E:\workspace\it ...