面向对象程序设计思想&继承与关键字(5.22)

1.面向对象思想的编程方式
  [1]创建类。属性,行为。
  [2]创建对象。分配内存空间,初始化属性。
  [3]调用对象中的行为。


2.继承
  概念:子类扩展父类的功能。
        子类扩展父类,可以得到父类的属性和方法,避免代码的重复冗余。
        子类可以添加自己的属性和方法
        子类可以重写父类的方法
        java中使用extends关键字来完成继承
  格式:public subclass extends superclass {}
  注意:1.在java中只允许单继承(一个子类只能有一个父类,一个父类可以多个子类)
        2.子类不能访问父类的私有成员
package com03;

public class Shape {
	protected int a;
	protected int b;
	
	public Shape(int _a, int _b) {
		// TODO Auto-generated constructor stub
		a = _a;
		b = _b;
	}
	
	int getArea()
	{
		return 0;
	}
}
package com03;

public class Circle extends Shape{
		
	public Circle(int _a) {
		super(_a, _a);
		// TODO Auto-generated constructor stub
	}

	int getArea()
	{
		return (int)(Math.PI * a * a);
	}
}
package com03;

public class Rect extends Shape{

	
	public Rect(int _a, int _b) {
		super(_a, _b);
		// TODO Auto-generated constructor stub
	}

	//子类覆盖了父类的方法
	//方法的重写
	//1.方法名一样,返回值一样,参数列表一样,子类的方法不能比父类方法拥有更低的权限。
	public int getArea()
	{
		return a*b;
	}
}
package com03;

public class Thriangle extends Shape {

	public Thriangle(int _a) {
		super(_a, _a);
		// TODO Auto-generated constructor stub
	}

	int getArea() {
		return (int) (Math.sin(Math.PI / 3) * a * a / 2);
	}
}
package com03;

public class Trapezoid extends Shape {
	public int c;
	public Trapezoid(int _a,int _b,int _c) {
		super(_a,_b,_c);
		
		// TODO Auto-generated constructor stub
	}
	
	int getArea() {
		return (int) (0.5 * ((a + b) * c));
	}
}
package com03;

public class TRect extends Shape {

	int h;
	
	public TRect(int _a, int _b, int _h) {
		super(_a, _b); //调用父类构造
		// TODO Auto-generated constructor stub
		h = _h;
	}
}
package com03;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Circle c = new Circle(2);
		System.out.println(c.getArea());
		Rect r = new Rect(2, 2);
		System.out.println(r.getArea());
		Thriangle t = new Thriangle(10);
		System.out.println(t.getArea());
	}
}
3.访问控制修饰符
   public   公共的      可以被所有类访问
   private  私有的      只能被自己访问
   缺省                 只能被同包访问
   protected 受保护的   可以被子类访问,也可以被同包访问


   访问控制修饰符可以修饰类,属性,方法
   类只能被public,缺省来修饰


4.关于父类和子类的构造方法
  [1]如果父类只定义了带参的构造方法,那么子类必须在构造的第一行调用父类的构造方法。
     例如super关键字
  [2]如果父类没有定义构造方法或者父类定义的是不带参的构造方法,
     那么子类不需要显示调用父类的构造


5.方法的重写(覆盖)override
  概念:发生在父类和子类之间。
  特点:1.方法名一样,返回值一样,参数列表一样。
2.覆盖的方法不能比父类中被覆盖的方法更严格的访问权限。
        3.覆盖的方法不能比被覆盖的方法抛出更多的异常。


6.this和super
  this表示当前对象
  [1]this.属性
  [2]this.方法

  [3]this(..)    调用当前构造

package com;

//一类事物
//静态的属性和动态行为
public class Book {
	String name;
	int price;
	String authors[];
	
	//构造方法作用:初始化属性
	public Book(String name, int price)
	{
		this.name = name;
		this.price = price;
		System.out.println(this);
	}
	
	public Book(String name, int price, String authors[]) {
		// TODO Auto-generated constructor stub
		this(name, price);  //调用当前构造
		this.authors = authors;
	}

	public void printBookInfo()
	{
		//当前对象
		setPrice(0.8f);
		System.out.println(name + " " + price);
		System.out.println(this);
	}
	
	private void setPrice(float sub)
	{
		price = (int)(price*sub);
	}
}
package com;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Book book = new Book("think in java", 100);
		book.printBookInfo();
		System.out.println(book);
		
		Book book_02 = new Book("head first in java", 99);
		book_02.printBookInfo();
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值