JAVA面向对象笔记总结(上)

------- android培训java培训、期待与您交流! ----------


 21  面向对象

//面向对象的概念是相对于面向过程而言的,所谓面向对象其实是从执行者变成了指挥者.面向对象中包含很多的类,是具有相同属性和行为的同一类事物.

//面向对象类的示例

class CarDemo01 

{

public static void main(String[] args) 

{

 Car c = new Car();//建立一个car对象

 c.color="black";//对属性进行修改

 c.run();//调用方法

}

}

class Car

{

String color = "red";//给属性进行赋初值

int door = 1;

void run()//这是一个方法,用来被其他具体对象调用

{

//System.out.println("The car is 

running...");

System.out.println(color+"...The car is 

running...");

}

}


22 封装 :

-----private关键字:

 |-----(1)是一个权限修饰符

 |-----(2)用于修饰成员变量或者成员函数

 |-----(3)被私有化的成员变量或函数只能在本类中才能被访问

-----功能:

      |-----对外提供set get方法进行访问,这样提高了数据的安全性

 


23 构造函数:

---------特点:

|----函数名字与类名相同

|----不用定义返回值类型

|----不可以写return语句

---------作用:

|-----给对象进行初始化

---------注意事项:

         |-----默认构造函数的特点

 |-----多个构造函数是以重载的形式存在的

构造代码块:

--------给对象进行初始化,对象已建立就开始运行,而且优先于构造函数执行

 和构造函数的区别:

 ---------构造代码块是给所有对象进行初始化,而构造函数是给调用的对象进行初始化

 


//构造函数示例

class Person

{

private String name;

private int age;

//构造代码块

{

System.out.println("\n你好,我来啦...........");

}

//构造函数,可以重载

Person()

{

print();

}

Person(String name)

{

this.name=name;

print();

}

Person(String name,int age)

{

this.name=name;

this.age=age;

print();

}

Punlic static void print()

{

System.out.println("姓名:"+name+",年龄:"+age);

}

}

class PersonDemo03

{

public static void main(String[] args)

{

Person p1 = new Person();

Person p2 = new Person("zhangsan");

Person p3 = new Person("lisi",20);

}

}


24 this 关键字:

--------特点是代表所在函数所属对象的引用,this代表本类对象的引用

--------当在函数内需要永达调用该函数的对象时,就可以使用

 this语句:

---------用于构造函数之间互相调用,只能定义在构造函数的第一句

示例:

class Person

{

private String name;

private int age;

Person(String name)

{

this.name=name;

}

Person(String name,int age)

{

this()name;//this语句,表示

this.name=name,

this.age=age;

}

}


class PersonDemo

{

public static void main(String[] args)

{

Person p = new Person();

p.setName("zhangsan");

p.setAge(20);

//p.run();

}

}

class Person

{

private String name;

private int age;

public void setName(String name)

{

this.name=name;

run();

}

public String getName()

{

return name;

}

public void setAge(int age)

{

this.age=age;

run();

}

public int getAge()

{

return age;

}

private void run()

{

System.out.print("姓名:"+name+",

:"+age);

}

}


25 static: 静态

------用法:是一个修饰符,用于修饰成员变量和成员函数

      被修饰后的成员具有一下特点:

 ----优先类的加载而加载

      |---随着类的加载到方法区中的静态区中

 ----优于对象存在(静态先存在,对象后存在)

 ----被所有对象共享

 ----可以直接被类名调用

-----什么时候使用静态:

     对象中共享数据可以使用static ,定义成静态

使用注意:

--------静态方法只能访问静态成员,非静态方法既可以访问静态也可以访问非静态

--------静态方法中不可以有this,super关键字(因为静态优先于对象存在)

--------主函数是静态的

实例变量和类变量区别:

------存放位置类变量随着类的加载而存在于方法区中

                 实例变量随着对象的建立而存在于对内存中

------生命周期>  类变量生命周期最长,随着类的消失而消失

         实例变量生命周期随着对象的消失而消失


class Person

{

String name;//成员变量,实例变量

static String country="中国";//静态的成员变量,为对象所共享

public void show()

{

System.out.println(name+"....."+country);

}

}

class StaticDemo01 

{

public static void main(String[] args) 

{

System.out.println(Person.country);

}

}

26 单例设计模式解决一个类在内存只存在一个对象

想要保证对象唯一

-----为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象

-----为了让其他程序可以访问到该类对象,只好在本类中 自定义一个对象

-----为了让其他程序对自定义对象的访问,可以对外提供一些访问方式

思路步骤:

----将构造函数私有化

----在类中创建一个本类对象

----提供一个方法可以获取到该对象


//饿汉式单例模式(安全,开发常用模式)

public class Single

{

private Single()//将构造函数私有化

{}

private static final Single s = new Single();//创建本类对象并私有化,防止其他类修改

public static Single getInstance()//主函数没有对象,所以只有静态之后才可以访问

{

return s;

}

}

public class SingDemo

{

public static void main(String[] args)

{

//new Single();

//new Single();

Single ss=Single.getInstance();//静态方法调用

System.out.println(ss);

}

}

 


 //懒汉式(延迟加载,不安全,面试常用)

  class Single 

 {

 private Single(){}

 private static Single s=null;

 public static Single getInstance()

 {

 if(s==null)

 {

 s=new Single();

 }

 return s;

 }

 }

 public class SingDemo

 {

 public static void main(String[] args)

{

 Single ss=Single.getInstance();

 System.out.println(ss);

 }

 }

 

27 继承:

----子类继承父类之后会拥有父类中的成员,成员变量和成员函数(不是全部)
   ---继承使用的关键字是extends
   ---父类是子类共性内容提取出来的
   ---继承的好处是减少代码量,提供代码复用性
   ---继承的出现,使用类和类出现了关系,导致了面向对象第三个特征多态
   ---子类可以直接使用父类的成员(不是全部,私有的无法继承)


成员特点:
---成员变量
---super关键字,区分子类和父类重名的成员变量
---子类有就用子类的,子类没有就用父类的
---成员函数
---子类出现了和父类一模一样的函数,函数的覆盖特性
---覆盖保证子类中的权限大于或者等于父类中的权限

构造函数
---子类继承不了
---子类的构造函数默认第一行有super();
---子类的所有构造函数都会访问父类的构造函数
---子类的构造函数可以简介的访问父类中的构造函数

class Person

{

private String name;

    private int age;

//获取姓名年龄

public String getName()

{

return this.name;

}

public int getAge()

{

return this.age;

}

}

class Student extends Person

{

public void study()

{

System.out.println("学生在学习java........."+getName()+"******"+getAge());

}

}

class Work extends Person

{

public void work()

{

System.out.println("工人在制造汽车---------"+getName()+"********"+getAge());

}

}

class ExtendsDemo01 

{

public static void main(String[] args) 

{

 Student s=new Student();

 s.study();

 Work w = new Work();

 w.work();

 

}

}

 

//函数继承和函数覆盖示例

 

class Phone

{

public void call()

{

System.out.println("通话......");

}

public void incoming()

{

System.out.println("来电显示.......");

}

}

class NewPhone extends Phone

{

public void incoming()复写父类方法

{

super.incoming();//继承父类方法

System.out.println("彩铃"); 

System.out.println("大头照...");

}

}

class Iphone extends Phone

{

public void incoming()

super.incoming();

System.out.println("视频电话.....");

System.out.println("Hello World!");

}

}

class OverrideDemo01 

{

public static void main(String[] args) 

{

Iphone p = new Iphone();

p.call();

p.incoming();

}

}

 


28 抽象类

 
---抽象类,是子类中共性的方法抽取的,但是父类中抽取的方法描述不清楚
---抽象方法,没有方法体,用abstract进行修饰,抽象方法存在于抽象类中
---类也要用abstract修饰
---抽象类中可以没有抽象方法
---抽象类不能实例化对象
---子类继承抽象类,覆盖抽象类中的全部抽象方法,建立子类的对象
---子类继承了抽象类,没有完全覆盖抽象方法,子类还是一个抽象类
---建立子类的对象,需要子类完全覆盖抽象方法

abstract class Company

{

//私有化变量,防止外部修改

private String name;

private int age;

private int number;

private double pay;

//初始化变量 

Company(String name,int age,int number,double pay)

{

 this.name = name;

 this.age = age;

 this.number = number;

 this.pay = pay;

}

//提供供外部访问的方法

public String getName()

{

return name;

}

public int getAge()

{

return age;

}

public double getPay()

{

return pay;

}

abstract public void job();

}

//经理类继承公司类

class Manager extends Company

{

private double bouns;

//构造函数

Manager(String name,int age,int number,double pay,double bouns)

{

super(name,age,number,pay);//继承父类变量

this.bouns = bouns;

}

public void job()

{

System.out.println("姓名:"+getName()+"--年龄:"+getAge()+"--工资"+getPay()+"--奖金"+bouns);

}

class Programmer extends Company

{

Programmer(String name,int age,int number,double pay)

{

super(name,age,number,pay);

}

public void job()

{

System.out.println("姓名:"+getName()+"--年龄"+getAge()+"--工资"+getPay());

}

}

class ExtendsDemo01

{

public static void main(String[] args)

{

Manager m = new Manager("zhangsan",20,007,10000.0,15000.0);

m.job(); 

Programmer p = new Programmer("lisi",22,001,12000.0);

p.job();

}

}


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值